如果newCachedThreadPool()
创建了一个根据需要创建新线程的线程池,但是在它们可用时将重用先前构造的线程,而在newFixedThreadPool(int size)
的情况下指定大小来创建线程池尺寸指定。
为什么没有newFixedThreadPool(int size)
以newCachedThreadPool()
方式实现线程池仅在需要时创建新线程并将线程限制为大小?
对上述内容的任何澄清都非常有用。
答案 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活动最大活动线程无限制