This question already has answers here:
Executors.newCachedThreadPool() versus Executors.newFixedThreadPool()

(8个答案)


5年前关闭。




如果按照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());

不同之处在于:
  • newFixedThreadPool的线程永不过期,而newCachedThreadPool的线程在上次使用
  • 后60秒过期
  • newCacheThreadPool的最大 Activity 线程数是无限的
  • 07-26 01:39