gpt4 book ai didi

java - 对于下面的程序,当线程完成工作时,为什么主线程不停止?

转载 作者:行者123 更新时间:2023-12-01 19:52:39 25 4
gpt4 key购买 nike

这个程序通过不同的线程打印替代数字可以正常工作,但是当打印 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();
}
}

最佳答案

那是因为最后一个线程陷入了waitnotifyAll 将通知所有等待线程(如果有)并释放锁。

while (num.get()<10){
// existing implementation
}
lock.notifyAll();

关于java - 对于下面的程序,当线程完成工作时,为什么主线程不停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50789396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com