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

时间:2014-12-14 21:37:57

标签: java multithreading caching wait executor

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

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

1 个答案:

答案 0 :(得分:0)

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