问问大佬们(1)class ZeroEvenOdd { private int n; ReentrantLock lock = new ReentrantLock(true); private int x = 1; private boolean isZero = true; private Condition condition = lock.newCondition(); public ZeroEvenOdd(int n) { this.n = n; } // printNumber.accept(x) outputs &quot;x&quot;, where x is an integer. public void zero(IntConsumer printNumber) throws InterruptedException { while(x <= n){ lock.lock(); if(isZero&amp;&amp;x <= n){ printNumber.accept(0); isZero = false; condition.signalAll(); }else{ condition.await(); } lock.unlock(); } } public void even(IntConsumer printNumber) throws InterruptedException { while(x <= n){ lock.lock(); if(!isZero &amp;&amp; x%2 == 0){ printNumber.accept(x); x++; isZero = true; condition.signalAll(); }else{ condition.await(); } lock.unlock(); } } public void odd(IntConsumer printNumber) throws InterruptedException { while(x <= n){ lock.lock(); if(!isZero &amp;&amp; x%2 == 1){ printNumber.accept(x); x++; isZero = true; condition.signalAll(); }else{ condition.await(); } lock.unlock(); } }}(2)class ZeroEvenOdd { private final int n; private int x = 1; // true: 打印0 false: 不打印0 private boolean isZero = true; public ZeroEvenOdd(int n) { this.n = n; } public void zero(IntConsumer printNumber) throws InterruptedException { while (x <= n) { synchronized (this) { if (isZero) { printNumber.accept(0); isZero = false; this.notifyAll(); } else { this.wait(); } } } } public void even(IntConsumer printNumber) throws InterruptedException { while (x <= n) { synchronized (this) { if (x % 2 == 0 &amp;&amp; !isZero) { printNumber.accept(x); isZero = true; x++; this.notifyAll(); } else { this.wait(); } } } } public void odd(IntConsumer printNumber) throws InterruptedException { while (x <= n) { synchronized (this) { if (x % 2 != 0 &amp;&amp; !isZero) { printNumber.accept(x); isZero = true; x++; this.notifyAll(); } else { this.wait(); } } } }}为什么(1)代码最后可能多输出一个0。(2)代码不会