并发库锁条件替代互斥锁
package com.test;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class ThreadTest9{/** * @param args */public static void main(String[] args){final Utils9 ts = new Utils9();new Thread(){@Overridepublic void run(){for (int i = 0; i < 30; i++){ts.sub(i);}}}.start();new Thread(){@Overridepublic void run(){for (int i = 0; i < 30; i++){ts.sub2(i);}}}.start();for (int i = 0; i < 30; i++){ts.main(i);}}}class Utils9{private int who = 1;Lock lock = new ReentrantLock();Condition condition1 = lock.newCondition();Condition condition2 = lock.newCondition();Condition condition3 = lock.newCondition();public void main(int j){lock.lock();try{if(who != 1){try{condition1.await();}catch (InterruptedException e){e.printStackTrace();}}for (int i = 1; i <= 5; i++){System.out.println("this's main "+j+" runnig is "+i);}this.who = 2;condition2.signal();}finally{lock.unlock();}}public void sub(int j){lock.lock();try{if(who != 2){try{condition2.await();}catch (InterruptedException e){e.printStackTrace();}}for (int i = 1; i <= 10; i++){System.out.println("this's sub "+j+" runnig is "+i);}this.who = 3;condition3.signal();}finally{lock.unlock();}}public void sub2(int j){lock.lock();try{if(who != 3){try{condition3.await();}catch (InterruptedException e){e.printStackTrace();}}for (int i = 1; i <= 6; i++){System.out.println("this's sub2 "+j+" runnig is "+i);}this.who = 1;condition1.signal();}finally{lock.unlock();}}}