newFixedThreadPool()vs newCachedThreadPool()

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

为什么newFixedThreadPool(int size)不是以newCachedThreadPool()方式实现的,其中线程池仅在需要时创建新线程并将线程限制为大小?

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

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活动最大活动线程无限制