所以,我有一个这样的服务器:
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次调用calledWhenTriggerEventOccurs()之后,3个新线程被放置在执行程序池中。然后我等了90秒。
我现在预计之前的3个帖子已经死了。但他们还活着。 当我再次调用calledWhenTriggerEventOccurs()时,正在创建第4个线程。
那么为什么这3个线程没有像我期望的那样被删除?
答案 0 :(得分:0)
你的任务很可能永远等待,所以无论你等多久,我都不会指望它们会死。当您通知()并且没有任何线程在等待时,通知将丢失。在你的三个任务有机会开始之前,你很可能已经通知了三次。