newFixedThreadPool() 与 newCachedThreadPool()

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());

区别是:

  1. newFixedThreadPool 的线程永不过期,而 newCachedThreadPool 的线程在上次使用后 60 秒后过期
  2. newCacheThreadPool的最大活动线程数没有限制