Java多线程(3):使用Condition中的await、signal进行线程间协作
来源:互联网 发布:电子烟推荐 知乎2017 编辑:程序博客网 时间:2024/05/17 06:54
详情见《Java语言程序设计-进阶篇》P238
使用场景:
使用condition可以实现线程协作。取款线程发现账户余额不足,先停止自己的线程,等待存款线程存入钱后再叫醒该取款线程重新取钱。
编码流程:
从ReentrantLock对象获得Condition对象
Lock lock=new ReentrantLock();Condition condition=lock.newCondition();
一个取款线程A发现账户余额不足,
while(balance<amount){ System.out.println("await()"); condition.await();} System.out.println("回来了threadA()");······finally{ lock.unlock(); }
线程A会在第四行停下来,进入休眠状态,不会去执行后面的finally内容!!
而这时一个存款线程B可以获取到这个锁然后进行存款操作,存款操作结束后,再调用signalAll():
condition.signalAll();System.out.println("先执行完所有threadB内容");······finally{ lock.unlock();}
调用signalAll()之后,线程B会将下面的全部代码执行完之后进入finally自己手动解锁,然后线程A才能拿到锁,并且在原来停下来的第四行继续往后执行,直至线程任务结束进入finally,解除lock。
一个需要注意的问题 :
普通一个线程(包括使用线程池!)中的任务执行完毕之后会自动结束!
Thread thread=new Thread(new Runnable()··············);thread.start();
0 0
- Java多线程(3):使用Condition中的await、signal进行线程间协作
- 黑马程序员——Java多线程—线程同步—Condition:await、signal、signalAll
- java 线程 Lock 锁使用Condition实现线程的等待(await)与通知(signal)
- JAVA线程间协作:Condition
- 线程同步ReentrantLock,condition(await,signal)
- 线程之间的协作await/signal
- java多线程协作(使用Condition)
- Java中的await()/signal()用法
- join(),ReentrantLock结合Condition的await(),signal()的使用
- java.util.concurrent包(3)——线程间通信wait/notify和await/signal
- JAVA多线程---Condition使用---线程通信
- java使用condition进行线程通信
- Java并发编程:Condition实现线程间协作
- Java中的线程间协作
- Condition的await-signal流程详解
- 【转】Condition的await-signal流程详解
- Condition的await-signal流程详解
- condition await signal 和 notity wait
- java.util.hashMap如何处理冲突
- 缺少函数标题(是否是老式的形式表?)
- 不让视图延展到状态栏
- 数组
- Leetcode 415 Add Strings
- Java多线程(3):使用Condition中的await、signal进行线程间协作
- INSTALL FAILED CONFLICTING PROVIDER问题完美解决方案
- adb install 安装apk过程中报错Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]
- es 语句
- Promise/A+规范
- 《自制编译器》中cbc在ubuntu64位上的简单用法
- |洛谷|NOIP2010|搜索|贪心|P1514 引水入城
- Linux vim gedit id
- SharpMap渐变色填充多边形