线程池新增线程时是如何判断队列是否满了的?

线程池新增线程时是如何判断队列是否满了的?

https://img1.sycdn.imooc.com//climg/632326ab09de7e1308010407.jpg
这里比如说我创建了一个定长为5的线程池

ExecutorService executorService = Executors.newFixedThreadPool(5);
for (int i = 0; i < 1000; i++) {
    executorService.execute(() -> System.out.println("多线程正在运行"));
}

循环运行某个线程,程序如何判断队列是否满了呢?因为我在创建线程池的时候并没有给任何关于队列的参数

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小蓝 2022-09-16 10:39:56

同学你好,线程池的等待队列是无界队列,所以不需要提供队列相关的参数。

当线程池中的所有线程都处于占用状态时,其他任务都会进入这个没有长度限制的队列中。

祝学习愉快~

  • 提问者 慕粉1555086949 #1

    那如果是无界的话,为什么有个判断队列是否满了的条件?

    2022-09-16 11:56:28
  • 好帮手慕小蓝 回复 提问者 慕粉1555086949 #2

    同学你好,同学的描述中是使用“newFixedThreadPool”方法创建的线程池。这个线程池中是没有上面图中红色框中的部分的。因为它的线程数量是固定的,没有可拓展的范围。

    如果是使用“newScheduledThreadPool”方法创建的线程池,那么具有上面图中的红色框部分的。这个队列的长度系统会根据传入的其他参数自行计算,不需要手动去指定。

    祝学习愉快~

    2022-09-16 13:09:41
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师