java - newFixedThreadPool() 与 newCachedThreadPool()

标签 java multithreading threadpool executorservice threadpoolexecutor

<分区>

如果 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的最大 Activity 线程数没有限制

关于java - newFixedThreadPool() 与 newCachedThreadPool(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29620591/

相关文章:

c++ - 两个并行运行的ncurses窗口

java - Java应用服务器线程池配置

c++ - boost::thread 在每次运行时产生不同的结果

java.security.AccessControlException : Access denied (java. lang.RuntimePermission 修改线程)

multithreading - 偶尔使用jmeter进行重复请求

python - Twisted:为什么将延迟回调传递给延迟线程会使线程突然阻塞?

java - 从 "heap memory"到 "java.sql.SQLException: Operation not allowed after ResultSet closed"

java - 如何在咖啡因缓存中缓存空值

java - BindingResult 不起作用

java - 在运行时更新 JList