为了账号安全,请及时绑定邮箱和手机立即绑定

corePoolSize=0 如何为 ThreadPoolExecutor 工作?

corePoolSize=0 如何为 ThreadPoolExecutor 工作?

拉风的咖菲猫 2021-08-25 11:05:03
的定义ExecutorService.newCachedThreadPool()是public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) {    return new ThreadPoolExecutor(0, Integer.MAX_VALUE,                                  60L, TimeUnit.SECONDS,                                  new SynchronousQueue<Runnable>(),                                  threadFactory);}它创建一个带有游泳池corePoolSize = 0,maximumPoolSize = Integer.MAX_VALUE和一个无界队列。但是在它的文档中ThreadPoolExecutor说:当在方法 execute(java.lang.Runnable) 中提交新任务,并且运行的线程少于 corePoolSize 时,即使其他工作线程空闲,也会创建一个新线程来处理请求。如果运行的线程多于 corePoolSize 但少于 maximumPoolSize ,则只有在队列已满时才会创建新线程。那么corePoolSize = 0在这种情况下如何工作?最初,有 0 个线程,所以虽然它在文档中没有说,但我认为它会为提交的第一个任务创建一个新线程。但是,现在我们有 1 个线程 > corePoolSize = 0,和 1 个线程 < maximumPoolSize = Integer.MAX_VALUE,根据上面的文档“只有当队列已满时才会创建一个新线程”,但是队列是无界的永远不会创建新线程,而我们只能使用 1 个线程?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 872 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信