线程的互斥
来源:互联网 发布:飞秋软件下载 编辑:程序博客网 时间:2024/04/29 03:14
我们可以用关键字private来保证数据对象只能被本类方法访问,所以我们只需对方法提出一套机制,来对共享的数据对象进行互斥锁定,这套机制就是线程的互斥使用关键字synchronized,有synchronized方法和synchronized块两种方法。
举例:模拟对银行账户的存取款操作
package Winter;class Account3{//银行账户类 String name; float amount; public Account3(String name,float amount) { this.name=name; this.amount=amount; } public void deposit(float amt){this.amount+=amt;}//存款方法 public float withdraw(float amt)//取款方法 {if(this.amount<amt){amt=amount;amount=0;}return amt; } public float checkamount(){return this.amount;}//查询账户}class Save extends Thread{//存款线程private Account3 a;private float amount;public Save(Account3 a,float amt){this.a=a;this.amount=amt;}public void run(){synchronized(a){float k=a.checkamount();try{ this.sleep(10);}catch(InterruptedException e){System.out.println(e.getMessage());}a.deposit(this.amount);System.out.println("现有"+k+",存入"+this.amount+",余额"+a.checkamount());}}}class Fetch extends Thread{//取款线程private Account3 a;private int amount;public Fetch(Account3 a,int amount){this.a=a;this.amount=amount;}public void run(){synchronized(a){float k=a.checkamount();try{ this.sleep(10);}catch(InterruptedException e){System.out.println(e.getMessage());}System.out.println("现有"+k+",取走"+a.withdraw(this.amount)+",余额"+a.checkamount());}}}public class test {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub Account3 a1=new Account3("张三",100); (new Save(a1,100)).start(); (new Save(a1,200)).start(); (new Fetch(a1,500)).start();}}
- 线程的互斥
- 线程的互斥
- 线程的互斥
- 线程的互斥
- 线程的互斥
- 线程的互斥
- 线程的互斥控制
- 传统线程的互斥
- Java线程的互斥
- Java线程的互斥
- 线程的共享互斥
- 线程之间的互斥
- 线程的互斥机制
- 线程的同步互斥
- 线程间的资源互斥共享
- BCB线程的互斥与同步
- 两条线程的互斥合作
- windows的线程互斥和同步
- Why doesn't C++ provide heterogenous containers?
- 大小端的几种判断方法
- powder designer 与数据库
- JAVA类的生命周期
- asp.net 返回上一页的实现方法小集
- 线程的互斥
- 大话设计模式4 简单工厂模式VS工厂模式
- ios 内存使用陷阱
- 推荐系统架构
- hdoj 1010 Repair the Wall(贪心)
- [C语言]系统目录操作函数
- 第五十五节 java学习——键盘事件
- ASP.NET页面错误处理
- 一个教育培训行业客户关系管理软件的开发过程--需求分析(二)