1. 问题描述
如何让多个线程交替执行是Java并发中的常见问题。现在就让我们通过一个具体例子来解决这个问题。
场景:现在假设有30张票需要出售。现在有三个售票处对该票进行售卖,现在要求着三个售票处以此对票进行出售。
2. 代码
2.1 资源类定义
首先,我们需要先定义资源类及其行为。我们当前问题中的资源很显然就是要出售的票,行为就是三个售票处售票的动作。资源类定义如下:
class Ticket {
private int num = 30;
private final Lock lock = new ReentrantLock();
private int flag = 1;
private final Condition c1 = lock.newCondition();
private final Condition c2 = lock.newCondition();
private final Condition c3 = lock.newCondition();
public void sail1() throws InterruptedException {
lock.lock();
try {
while(flag != 1) {
c1.await();
}
if(num > 0) {
num--;
}
System.out.println(Thread