newFixedThreadPool()vs newCachedThreadPool()

Bri*_*nal 3 java multithreading executorservice threadpool threadpoolexecutor

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

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

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

Evg*_*eev 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());
Run Code Online (Sandbox Code Playgroud)

区别在于a)FixedThreadPool的线程永不过期,而CacheThreadPool在最后一次使用后60秒到期b)CacheThreadPool活动最大活动线程无限制