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());
区别是:
newFixedThreadPool
的线程永不过期,而 newCachedThreadPool
的线程在上次使用后 60 秒后过期
newCacheThreadPool
的最大活动线程数没有限制
如果 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
的最大活动线程数没有限制