所以,我有这样的服务器:
public class Server {
private ExecutorService executor = null;
private class WorkerThread implements Runnable{
public void run() {
try{
do{
synchronized(executor){
executor.wait();
}
// doSomeThing
}while(true);
} catch (InterruptedException e) {
}
}
}
Server() {
executor = Executors.newCachedThreadPool();
}
public void calledWhenTriggerEventOccurs(){
synchronized(executor) {
executor.execute(new WorkerThread());
executor.notify();}
}
}
连续调用 3 次调用 WhenTriggerEventHappen() 后,执行程序池中放置了 3 个新线程。然后我就等90秒。
我现在预计前 3 个线程已经死了。但他们仍然活着。当我再次调用调用调用时触发器事件发生()时,正在创建第 4 个线程。
那么为什么这 3 个线程没有像我预期的那样被删除呢?
你的任务很可能永远等待,所以无论你等多久,我都不会指望它们会死。 当您通知()并且没有任何线程在等待时,通知将丢失。 很可能在三个任务有机会开始之前,您已经通知了三次。