案例介绍
A 线程打印 5 次 A,B 线程打印 10 次 B,C 线程打印 15 次 C,按照 此顺序循环 10 轮
public class ThreadDemo2 {private ReentrantLock reentrantLock = new ReentrantLock();private Condition c1 = reentrantLock.newCondition();private Condition c2 = reentrantLock.newCondition();private Condition c3 = reentrantLock.newCondition();private int flag = 1;private void printA() {reentrantLock.lock();try {while (flag != 1) {c1.await();}for (int i = 0; i < 5; i++) {System.out.print("A ");}System.out.println();flag = 2;c2.signal();} catch (Exception e) {e.printStackTrace();} finally {reentrantLock.unlock();}}private void printB() {reentrantLock.lock();try {while (flag != 2) {c2.await();}for (int i = 0; i < 10; i++) {System.out.print("B ");}System.out.println();flag = 3;c3.signal();} catch (Exception e) {e.printStackTrace();} finally {reentrantLock.unlock();}}private void printC() {reentrantLock.lock();try {while (flag != 3) {c3.await();}for (int i = 0; i < 15; i++) {System.out.print("C ");}System.out.println();flag = 1;c1.signal();} catch (Exception e) {e.printStackTrace();} finally {reentrantLock.unlock();}}public static void main(String[] args) {ThreadDemo2 demo2 = new ThreadDemo2();new Thread(() -> {for (int i = 0; i < 3; i++) {demo2.printA();}}).start();new Thread(() -> {for (int i = 0; i < 3; i++) {demo2.printB();}}).start();new Thread(() -> {for (int i = 0; i < 3; i++) {demo2.printC();}}).start();}}

