让三个线程顺序打印A,B,C
具体代码
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Main{
public static void main(String[] args) {
Test test = new Test();
new Thread(()->{
while(true){
test.printA();
}
},"A").start();
new Thread(()->{
while(true){
test.printB();
}
},"B").start();
new Thread(()->{
while(true){
test.printC();
}
},"C").start();
}
}
class Test {
private int flag = 1;
private Lock lock = new ReentrantLock();
private Condition c1 = lock.newCondition();
private Condition c2 = lock.newCondition();
private Condition c3 = lock.newCondition();
public void printA(){
lock.lock();
try{
while(flag!=1){
c1.await();
}
System.out.println("A");
flag = 2;
c2.signal();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
public void printB(){
lock.lock();
try{
while(flag!=2){
c2.await();
}
System.out.println("B");
flag = 3;
c3.signal();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
public void printC(){
lock.lock();
try{
while(flag!=3){
c3.await();
}
System.out.println("C");
flag = 1;
c1.signal();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}