1.题目
2.java锁思路
对于java可以采用一个锁和三个Condition来实现,用一个标志标识要打印0,不打印0时,zeroCondition await。然后用一个数字记录当前要打印的数,当该数为奇数时,signal打印奇数的,否则,signal打印偶数的。
类代码:
class ZeroEvenOdd {
private int n;
private int num = 1;
private boolean flag = true;//是否打印0
Lock lock = new ReentrantLock();
Condition zeroConditon = lock.newCondition();
Condition evenConditon = lock.newCondition();
Condition oddConditon = lock.newCondition();
public ZeroEvenOdd(int n) {
this.n = n;
}
// printNumber.accept(x) outputs "x", where x is an integer.
public void zero(IntConsumer printNumber) throws InterruptedException {
for (int i = 0; i < n; i++) {
lock.lock();
while (!flag) {
zeroConditon.await();
}
printNumber.accept(0);
if (this.num % 2 == 0) {
evenConditon.signal();
} else {
oddConditon.signal();
}
flag = false;
lock.unlock