【发布时间】:2022-01-20 13:46:19
【问题描述】:
我正在尝试通过等待通知使用 2 个线程生成奇偶数。 但它只打印 0。
谁能解释一下为什么会这样。
下面是我的代码:
package waitNotify2;
class Odd implements Runnable {
Object lock;
volatile Integer ai;
public Odd(Object lock, Integer ai) {
super();
this.lock = lock;
this.ai = ai;
}
@Override
public void run() {
synchronized(lock) {
while(true) {
while(ai % 2 == 0) {
try {
lock.wait();
} catch(InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(ai + " ");
ai++;
lock.notify();
}
}
}
}
class Even implements Runnable {
Object lock;
volatile Integer ai;
public Even(Object lock, Integer ai) {
super();
this.lock = lock;
this.ai = ai;
}
@Override
public void run() {
synchronized(lock) {
while(true) {
while(ai % 2 == 1) {
try {
lock.wait();
} catch(InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(ai + " ");
ai++;
lock.notify();
}
}
}
}
public class PrintOddEven2 {
// Driver Code
public static void main(String[] args) {
Object o = new Object();
Integer i = 0;
Odd odd = new Odd(o,i);
Even even = new Even(o,i);
Thread t1 = new Thread(odd);
Thread t2 = new Thread(even);
t1.start();
t2.start();
}
}
【问题讨论】:
标签: java multithreading wait synchronized notify