博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lock&Condition
阅读量:5817 次
发布时间:2019-06-18

本文共 2991 字,大约阅读时间需要 9 分钟。

package com.ixhong.base.thread;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;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();        }     }      }}

转载地址:http://oyhbx.baihongyu.com/

你可能感兴趣的文章
Debian系列Linux/Ubuntu 安装软件
查看>>
Java常见基础问题
查看>>
Java Web整合开发(5) - Session
查看>>
30. 初始化数据库环境
查看>>
Python之print详解
查看>>
Docker的学习--命令使用详解
查看>>
几种通讯协议的比较RMI > Httpinvoker >= Hessian >> Burlap >> web service (转)
查看>>
编写更少量的代码:使用apache commons工具类库
查看>>
CSS实现OFF-ON开关按钮
查看>>
网页加载后或者网页加载前执行Javascript
查看>>
Android单元测试之三:使用模拟框架模拟依赖
查看>>
jQuery练习:表单模态框
查看>>
php + Redis 写的类似于新浪微博的feed系统
查看>>
python获取命令行参数
查看>>
Controller接口控制器2
查看>>
在Mac电脑上为iPhone或iPad录屏的方法
查看>>
Ubuntu Vim 复制到系统粘贴板
查看>>
get和post的区别
查看>>
书籍管理系统 -----没有form组件
查看>>
「Vijos 1284」「OIBH杯NOIP2006第二次模拟赛」佳佳的魔法阵
查看>>