缓存线程池中的线程永远不会被删除



所以,我有这样的服务器:

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 个线程没有像我预期的那样被删除呢?

你的任务很可能永远等待,所以无论你等多久,我都不会指望它们会死。 当您通知()并且没有任何线程在等待时,通知将丢失。 很可能在三个任务有机会开始之前,您已经通知了三次。

最新更新