java线程池求大佬给我讲解一下

lunshen9511 2017-03-23 10:09:14
ThreadPoolExecutor pool =new ThreadPoolExecutor(5,10,200, TimeUnit.MILLISECONDS,new LinkedBlockingQueue());
10那个参数不是 maximumPoolSize 吗 也就是 线程池最大线程数量 但是当我使用LinkedBlockingQueue() 这个缓存队列的时候,不管有多少线程它都会最多执行5个,剩下的全仍缓存队列 都不会报警了, 当使用这个 ThreadPoolExecutor pool =new ThreadPoolExecutor(5,10,200, TimeUnit.MILLISECONDS,new ArrayBlockingQueue(5)); 这时候 线程池里最多执行10个 多余的 放消息队列 而超过15个就会报警 求大神讲解为啥 new LinkedBlockingQueue()使用这个以后 感觉maximumPoolSize 这个参数没用啊
...全文
120 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
yql1986 2017-03-24
  • 打赏
  • 举报
回复
建议你看一下JDK文件文档对ThreadPoolExecutor的注释 ThreadPoolExecutor 将会自动调整根据设置的corePoolSize和maximumPoolSize来调整线程池的大小。当一个新的task通过执行execute方法提交时,如果当前有小于corePoolSize的线程正在运行,即使线程池中有其它工作的线程正在休眠,一个新的线程将会被创建用来处理这个请求。 如果有大于corePoolSize但小于maximumPoolSize的线程正在运行,仅仅当队列满的时候会创建一个新的线程用来处理这个请求。 ThreadPoolExecutor pool =new ThreadPoolExecutor(5,10,200, TimeUnit.MILLISECONDS,new LinkedBlockingQueue()); 这个是无界队列 如果有大于corePoolSize但小于maximumPoolSize的线程正在运行,仅仅当队列满的时候会创建一个新的线程用来处理这个请求。 ThreadPoolExecutor pool =new ThreadPoolExecutor(5,10,200, TimeUnit.MILLISECONDS,new ArrayBlockingQueue(5)); 这个队列有界

51,412

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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