condition实现三个线程顺序执行《2》

来源:互联网 发布:英语四级 知乎 编辑:程序博客网 时间:2024/05/23 01:13
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.sub1(i);}}static class Business {Lock lock = new ReentrantLock();//同上一个例子差不多,实现三个conditons 一个锁内部可以有多个Condition,即有多路等待和通知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 sub1(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("sub1 thread sequence of " + j+ ",loop of " + i);}shouldSub = 2;condition2.signal();} finally {lock.unlock();}}}}

原创粉丝点击