2.1使用synchronized实现同步方法
来源:互联网 发布:python celery 教程 编辑:程序博客网 时间:2024/06/05 02:39
1.创建Account类,该类用于模拟银行账户
public class Account { //账户的余额 private double balance; //取得账户的余额 public double getBalance() { return balance; } //设置账户的余额 public void setBalance(double balance) { this.balance = balance; } //将增加的数量加入到余额中 public synchronized void addAmount(double amount) { double tmp=balance; try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } tmp+=amount; balance=tmp; System.out.println("存入后,当前账户余额:"+balance); } //从余额中减去相应的数量 public synchronized void subtractAmount(double amount) { double tmp=balance; try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } if(tmp>=amount) { tmp-=amount; balance=tmp; System.out.println("取出后,当前账户余额:"+balance); } }}
2.创建实现Runnable接口的Bank类,模拟ATM机取款
public class Bank implements Runnable{ private Account account; public Bank(Account account) { this.account=account; } @Override public void run() { //每次 从账户余额中减去1000 for (int i=0; i<10; i++){ account.subtractAmount(1000); } }}
3.创建实现Runnable接口的Company类,用于模拟往账户中汇款
public class Company implements Runnable{ private Account account; public Company(Account account) { this.account=account; } @Override public void run() { for (int i=0; i<10; i++){ account.addAmount(1000); } }}
4.主类的实现
public class Main { public static void main(String[] args) { // 创建爱你 一个新的账户 Account account=new Account(); // 设置账户的初始余额 account.setBalance(1000); // 创建一个模拟的公司实体对象,并作为线程的参数传入启动线程 Company company=new Company(account); Thread companyThread=new Thread(company); // 创建一个模拟的银行实体对象,并作为线程的参数传入启动线程 Bank bank=new Bank(account); Thread bankThread=new Thread(bank); // 打印账户的余额 System.out.printf("Account : Initial Balance: %f\n",account.getBalance()); // 启动线程 companyThread.start(); bankThread.start(); try { // 等待线程运行完毕 companyThread.join(); bankThread.join(); // 打印最终的余额 System.out.printf("Account : Final Balance: %f\n",account.getBalance()); } catch (InterruptedException e) { e.printStackTrace(); } }}
4.运行结果如下:
在模拟存取账户金额的同时,这边也考虑到了实际的情况:如果账户余额不够需要取出的钱的话,那么久不能取。
0 0
- 2.1使用synchronized实现同步方法
- 使用synchronized实现同步方法
- 使用synchronized实现同步方法
- 2.1使用synchronized同步方法
- 并发编程--使用synchronized实现同步方法
- 2.1 synchronized同步方法
- 使用synchronized块同步方法..
- 使用Synchronized块同步方法
- 使用Synchronized块同步方法
- 使用Synchronized块同步方法
- 使用Synchronized关键字同步类方法
- 使用Synchronized关键字同步类方法
- synchronized:线程同步方法使用总结
- 使用synchronized实现同步代码块
- 【多线程】synchronized同步方法
- synchronized同步方法
- Java同步方法synchronized
- java--同步方法(synchronized)
- 插入位置
- Data Pump
- 12
- 判断对象==
- 13
- 2.1使用synchronized实现同步方法
- 14
- alarm和pause函数
- mysql数据库的插入(insert)和删除(delete)操作
- 15
- 堆实际应用
- Codeforces-678C-Joty and Chocolate
- The Flat Dictionary
- Oracle安装