代码实现
@Slf4j
public class Test {
private static Lock lock = new ReentrantLock();
private static Condition[] conditions = new Condition[]{lock.newCondition(), lock.newCondition(), lock.newCondition()};
private volatile int state = 1;
private void run(int num){
int next = num%3 + 1;
while (true){
lock.lock();
try{
while(num != state){
conditions[num-1].await();
}
System.out.println(num);
this.state = next;
conditions[next-1].signalAll();
}catch (Exception ex){
ex.printStackTrace();
}finally {
lock.unlock();
}
}
}
public static void main(String[] args) {
Test test = new Test();
for(int i=1;i<4;i++){
final int j = i;
new Thread(()->{test.run(j);}).start();
}
}
}
