wait 和 notfiy 实现线程同步
来源:互联网 发布:新兵的爆菊经历知乎 编辑:程序博客网 时间:2024/05/19 18:00
//创建Account账户,存取款方法import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class Account {private double balance;//余额,共享资源//private Lock lock = new ReentrantLock();//private Condition cond = lock.newCondition();//存款方法public void deposit(double amount) throws InterruptedException{//创建锁synchronized(this){System.out.println("开始存款" + balance);balance += amount;notify();//延时//Thread.sleep((int)(Math.random() * 100 + 200));System.out.println("存款结束" + balance);}}//取款public void withdraw(double amount) throws InterruptedException {synchronized (this) {//循环判断条件while (balance < amount){System.out.println("准备取款,判断余额:" + balance + "取款金额为:" + amount);wait();}System.out.println("开始取款" + balance);balance -= amount;System.out.println("取款结束" + balance);}}public double getBalance(){return balance;}}
//存款线程public class DepositTask implements Runnable {private Account account;public DepositTask(Account account) {this.account = account;}@Overridepublic void run() {try {while(true){account.deposit((Math.random() * 1000));}} catch (InterruptedException e) {e.printStackTrace();}}}
//取款线程public class WithdrawTask implements Runnable {private Account account;public WithdrawTask(Account account) {this.account = account;}@Overridepublic void run() {try {while(true){account.withdraw(Math.random() * 500);}} catch (InterruptedException e) {e.printStackTrace();}}}
//测试
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Test {
public static void main(String[] args) {
Account account = new Account();
ExecutorService pool = Executors.newFixedThreadPool(2);
//存款任务
pool.execute(new DepositTask(account));
//取款任务
pool.execute(new WithdrawTask(account));
pool.shutdown();
//等待全部线程结束
while(!pool.isTerminated());
System.out.println(account.getBalance());
}
}
0 0
- wait 和 notfiy 实现线程同步
- 线程学习一,wait和notify实现简单的同步
- 线程的同步 wait和notify
- JAVA线程同步wait()和notify()讲解
- 线程同步2-同步通信wait和notify
- 线程学习二,notify和wait实现消费者-生产者同步问题
- 线程同步 wait()、notify()
- 线程同步 wait()、notify()
- 利用Object的wait、notify来实现线程同步原理
- Object的wait、notify来实现线程同步原理
- wait 和 notify 实现线程间通信
- wait,notify,sleep,join和线程同步问题
- wait,notify,sleep,join和线程同步问题(续)
- wait,notify,sleep,join和线程同步问题
- JAVA线程同步中wait()和notify()简洁例子
- Java线程同步中的wait()和notify()使用简单示例
- 线程之间的同步和通信,synchronized,wait(),notify(),notifyAll()
- JAVA线程同步中的notify和wait()函数
- java分布式环境下,反序列化遇到类型擦除问题,解决思路
- 解决Zookeeper无法启动的问题
- Hadoop运维问题记录
- iOS动画进阶
- Python C/C++混合编程
- wait 和 notfiy 实现线程同步
- Coloring Brackets CodeForces
- git服务器新增用户
- vsftpd文件服务器安装(Linux)
- 学习小结,对struct结构深化巩固
- 分支限界法为什么经典?
- Httpclient中 Exception in thread "main" java.lang.IllegalStateException: Response content has been al
- 在Win10 Anaconda中安装Tensorflow
- SPOJ COT2 Count on a tree II