代码改变世界

ThreadPoolExecutor的坑

2015-06-29 14:32  Loull  阅读(387)  评论(0)    收藏  举报

 

ExecutorService executorService = new ThreadPoolExecutor(0, MAX_THREAD_NUM, 60,
            TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());//FIXME 这里有个坑

这个线程池将没法工作。

public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue)

工作机制:

先查看corePoolSize的线程是否有空闲的,如果没有空闲的,就往workQueue里面塞,如果workQueue塞满了,才会创建新线程,直到数量达到maximumPoolSize

 

所以之前创建的线程池会不停的塞阻塞队列,而没有线程在真正工作。。