逻辑:当线程1 执行完之后 通知线程2 再通知3 循序
用了ReentrantLock锁来完成,创建多个Condition
package com.daijunyi.lock;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;public class PrintTest {private int flag = 0; //0表示 c1 1表示 c2 2表示c3private ReentrantLock reentrantLock = new ReentrantLock();private Condition c1 = reentrantLock.newCondition();private Condition c2 = reentrantLock.newCondition();private Condition c3 = reentrantLock.newCondition();private void print1() throws InterruptedException {reentrantLock.lock();try {while (flag != 0){c1.await();}System.out.println(Thread.currentThread().getName()+"print1打印");flag = 1;c2.signal();}finally {reentrantLock.unlock();}}private void print2() throws InterruptedException {reentrantLock.lock();try {while (flag != 1){c2.await();}System.out.println(Thread.currentThread().getName()+"print2打印");flag = 2;c3.signal();}finally {reentrantLock.unlock();}}private void print3() throws InterruptedException {reentrantLock.lock();try {while (flag != 2){c3.await();}System.out.println(Thread.currentThread().getName()+"print3打印");flag = 0;c1.signal();}finally {reentrantLock.unlock();}}public static void main(String[] args) {PrintTest printTest = new PrintTest();new Thread(()->{for (int i=0;i<10;i++){try {printTest.print1();} catch (InterruptedException e) {e.printStackTrace();}}},"线程1").start();new Thread(()->{for (int i=0;i<10;i++) {try {printTest.print2();} catch (InterruptedException e) {e.printStackTrace();}}},"线程2").start();new Thread(()->{for (int i=0;i<10;i++) {try {printTest.print3();} catch (InterruptedException e) {e.printStackTrace();}}},"线程3").start();}}
