java多线程通信同步之多Condition通信
2015-06-30 22:20
531 查看
public class ThreeConditionCommunication { /** * @param args */ public static void main(String[] args) { final Business business = new Business(); new Thread( new Runnable() { @Override public void run() { for(int i=1;i<=50;i++){ business.sub2(i); } } } ).start(); new Thread( new Runnable() { @Override public 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 block e.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 block e.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 block e.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(); } } } }
整理自教程
相关文章推荐
- Struts2(九)OGNL表达式
- java 对象排序
- Java实现websocket
- java多线程之线程间同步通信
- 我们如何看Java的开发环境???
- @Autowired和@Resource装配
- struts的titles框架
- spring mvc 数据绑定 400错误
- 内存分配与回收策略
- java中key值可以重复的map---IdentityHashMap
- Eclipse UML小工具AmaterasUML的配置和使用
- CXF+Spring+JAXB+Json构建Restful服务
- JAVA学习第8天
- java中的contains()方法
- JAVA学习第7天(15-6-25)
- spring mvc ModelAndView 404 错误
- 接口和抽象类区别 .
- java中try()的用法与意义
- java基础之SimpleDateFormat的说明
- 【Myeclipse设置】MyEclipse取消Show in Breadcrumb的方法