newFixedThreadPool()vs newCachedThreadPool()

时间:2015-04-14 06:31:26

标签: java multithreading threadpool executorservice threadpoolexecutor

如果newCachedThreadPool()创建了一个根据需要创建新线程的线程池,但是在它们可用时将重用先前构造的线程,而在newFixedThreadPool(int size)的情况下指定大小来创建线程池尺寸指定。

为什么没有newFixedThreadPool(int size)newCachedThreadPool()方式实现线程池仅在需要时创建新线程并将线程限制为大小?

对上述内容的任何澄清都非常有用。

1 个答案:

答案 0 :(得分:6)

newFixedThreadPool也懒惰地创建线程,试试这个测试

    ThreadPoolExecutor p = (ThreadPoolExecutor) Executors.newFixedThreadPool(2);
    System.out.println(p.getPoolSize());
    p.execute(new Runnable() {public void run() {}});
    System.out.println(p.getPoolSize());

区别在于a)FixedThreadPool的线程永不过期,而CacheThreadPool在最后一次使用后60秒内到期b)CacheThreadPool活动最大活动线程无限制