这个程序通过不同的线程打印替代数字可以正常工作,但是当打印 0-9 的所有数字时为什么这个程序不停止?我必须手动停止我的应用程序。
public class EvenOddPrinter implements Runnable{
private AtomicInteger num = new AtomicInteger(0);
private Object lock = new Object();
@Override
public void run() {
synchronized (lock){
while (num.get()<10){
System.out.println(num.getAndAdd(1) + " - "+Thread.currentThread().getName());
lock.notify();
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
public class Executor {
public static void main(String[] args) throws InterruptedException {
EvenOddPrinter eop = new EvenOddPrinter();
Thread t1 = new Thread(eop);
Thread t2 = new Thread(eop);
t1.start();
t2.start();
}
}
最佳答案
那是因为最后一个线程陷入了wait
。 notifyAll
将通知所有等待线程(如果有)并释放锁。
while (num.get()<10){
// existing implementation
}
lock.notifyAll();
关于java - 对于下面的程序,当线程完成工作时,为什么主线程不停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50789396/