黑马程序员——Java基础---线程的另一个总结(7)--condition,await
来源:互联网 发布:大数据精准营销特点 编辑:程序博客网 时间:2024/05/17 01:27
与前边的通讯互斥的synchronized与wait相同
这里使用condition与await相同
public class ConditionCommunication {/** * @param args */public static void main(String[] args) {final Business business = new Business();new Thread(new Runnable() {@Overridepublic void run() {for(int i=1;i<=50;i++){business.sub(i);}}}).start();for(int i=1;i<=50;i++){business.main(i);}}static class Business {Lock lock = new ReentrantLock();Condition condition = lock.newCondition(); private boolean bShouldSub = true; public void sub(int i){ lock.lock(); try{ while(!bShouldSub){ try {condition.await();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} }for(int j=1;j<=10;j++){System.out.println("sub thread sequence of " + j + ",loop of " + i);} bShouldSub = false; condition.signal(); }finally{ lock.unlock(); } } public void main(int i){ lock.lock(); try{ while(bShouldSub){ try {condition.await();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} }for(int j=1;j<=100;j++){System.out.println("main thread sequence of " + j + ",loop of " + i);}bShouldSub = true;condition.signal(); }finally{ lock.unlock(); } }}}
实现三线程互斥
public class ThreeConditionCommunication {/** * @param args */public static void main(String[] args) {final Business business = new Business();new Thread(new Runnable() {@Overridepublic void run() {for(int i=1;i<=50;i++){business.sub2(i);}}}).start();new Thread(new Runnable() {@Overridepublic void run() {for(int i=1;i<=50;i++){business.sub3(i);}}}).start();for(int i=1;i<=50;i++){business.main(i);}}static class Business {Lock lock = new ReentrantLock();Condition condition1 = lock.newCondition();Condition condition2 = lock.newCondition();Condition condition3 = lock.newCondition(); private int shouldSub = 1; public void sub2(int i){ lock.lock(); try{ while(shouldSub != 2){ try {condition2.await();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} }for(int j=1;j<=10;j++){System.out.println("sub2 thread sequence of " + j + ",loop of " + i);} shouldSub = 3; condition3.signal(); }finally{ lock.unlock(); } } public void sub3(int i){ lock.lock(); try{ while(shouldSub != 3){ try {condition3.await();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} }for(int j=1;j<=20;j++){System.out.println("sub3 thread sequence of " + j + ",loop of " + i);} shouldSub = 1; condition1.signal(); }finally{ lock.unlock(); } } public void main(int i){ lock.lock(); try{ while(shouldSub != 1){ try {condition1.await();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} }for(int j=1;j<=100;j++){System.out.println("main thread sequence of " + j + ",loop of " + i);}shouldSub = 2;condition2.signal(); }finally{ lock.unlock(); } }}}
0 0
- 黑马程序员——Java基础---线程的另一个总结(7)--condition,await
- 黑马程序员——Java基础---线程的另一个总结(5)--线程池,线程定时器
- 黑马程序员——Java基础---线程的另一个总结(3)--互斥,线程锁
- 黑马程序员——Java基础---线程的另一个总结(1)--基本创建方法
- 黑马程序员——Java基础---线程的另一个总结(2)--定时器
- 黑马程序员——Java基础---线程的另一个总结(9)--其他同步工具
- 黑马程序员——Java多线程—线程同步—Condition:await、signal、signalAll
- 黑马程序员——Java基础---线程的另一个总结(8)--Semaphere同步工具,控制线程可用线程
- 黑马程序员——Java基础---线程的另一个总结(6)--线程读写锁,缓存小例子
- 黑马程序员——Java基础---线程的另一个总结(10)--练习,空中网面试题总结
- 黑马程序员——Java基础---线程的另一个总结(4)--线程通信(互斥),线程范围的共享变量
- java 线程 Lock 锁使用Condition实现线程的等待(await)与通知(signal)
- 黑马程序员—— 线程基础总结
- 黑马程序员——java基础:线程
- 黑马程序员——Java基础--线程
- 黑马程序员—JAVA基础之多线程
- 黑马程序员-Java基础之多线程总结
- 黑马程序员——JAVA基础之多线程的安全问题
- Clone Graph DFS&BFS 图的复制
- 出走一厦门篇
- 智能听音公司Soundhawk获得550万美元融资,通过降噪算法让用户听到真正想听的声音
- 35.app后端搜索入门
- javax.swing.Timer 使用
- 黑马程序员——Java基础---线程的另一个总结(7)--condition,await
- 出走二杭州篇
- Service的生命周期(一)
- 【Leetcode】Compare version numbers
- 十个JavaScript中易犯的小错误,你中了几枪?
- 百度怎样监控其他搜索引擎或途径的来源流量
- 胡振亮:原来这就是很多网站百度权重做不上去的原因
- android 获取数据-需要注意的地方(系统优化)
- php扩展开发笔记(10)自定义 libpng 库中的 IO 函数,将图片写入内存