java线程池问题

十歌 2018-09-20 10:47:45
对于FfixedThreadPool来说,如果当前任务数量小于核心线程数,并且有闲置的核心线程,那么新来的任务是交由空闲的核心线程执行还是新创建线程来执行? 因为在网上看到两种不同的说法,前来请教各位。
...全文
367 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
verejava 2018-09-24
  • 打赏
  • 举报
回复
并发编程 之 ExecutorService 线程池 铁运行例子 http://www.verejava.com/?id=17266756343972
  • 打赏
  • 举报
回复
学习了,看注释
Surrin1999 2018-09-20
  • 打赏
  • 举报
回复
顺便 我说的可能有歧义了 我说的最大值Integer.MAX_VALUE是链表队列的最大任务数,线程池的最大线程数是你new时传递的形参
java123.vip 2018-09-20
  • 打赏
  • 举报
回复
一楼说的很明白了,看看源码里的注释。
Surrin1999 2018-09-20
  • 打赏
  • 举报
回复
你问这个问题问题证明没有好好看过ThreadPoolExecutor类的源码



大概翻译一下 :

如果正在运行的线程数量少于corePoolSize的线程,便尝试使用指定的命令作为其第一个任务启动新线程。 对addWorker的调用以原子方式检查runState和workerCount,因此通过返回false来防止在不应该添加线程时发生的错误警报。


只有达到线程池中最大线程数maximumPoolSize才把任务放到链表队列LinkedBlockingQueue里 最大值为Integer.MAX_VALUE

newFixedThreadPool相当于创建一个定长的线程池 本质上调用的还是ThreadPoolExecutor

public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());
}


我上面截图的就是ThreadPoolExecutor 的execute方法

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧