线程池3-6节ScheduledThreadPool

线程池3-6节ScheduledThreadPool

视频演示中调用threadPool.scheduleAtFixedRate方法时,为什么输出不是像:

pool-1-thread-1

pool-1-thread-2

pool-1-thread-3

pool-1-thread-4

pool-1-thread-5

pool-1-thread-6

...

pool-1-thread-10呢?

按照之前的讲解,在线程数还没达到corePoolSize(10)的时候,即便有线程空闲,当加入新任务时,不也是应该创建新线程吗?为什么控制台的输出会是

pool-1-thread-1

pool-1-thread-1

pool-1-thread-2

pool-1-thread-1

pool-1-thread-3

pool-1-thread-2

...?

正在回答

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

2回答

同学你好 ,线程执行时,添加新线程的规则,如下所示:

https://img1.sycdn.imooc.com//climg/61a2e3de09f9fded12560476.jpg

    最开始线程总数小于corePoolSize时,即使有线程处于空闲状态,新任务到来时也会创建新的线程,但并不是一定会使用新创建的线程,会优先使用空闲线程。也就是说当线程总数小于corePoolSize时,是会创建新的线程,但并不是一定会使用新的线程。则当线程总数大于等于corePoolSize,线程进入等待不会直接进行创建。

祝学习愉快!

好帮手慕阿园 2021-11-27 14:35:53

同学你好,并不是哦,这个参数的意思是表示如果没有空闲的线程执行该任务且当前运行的线程数少于corePoolSize,则添加新的线程执行该任务,并不是会一直按照顺序执行任务的,比如前两次是线程1执行该任务,说明线程1处于空闲状态,而第三次时线程2执行的该任务,则表示添加了新的线程执行该任务

https://img1.sycdn.imooc.com//climg/61a1ca130984699802260309.jpg

祝学习愉快~


  • 提问者 ARUKANA #1

    那么前面3-1的讲解是不是错了呢?

    https://img1.sycdn.imooc.com//climg/61a1d7a108bb5a1013030554.jpg

    2021-11-27 15:02:05
  • 好帮手慕阿园 回复 提问者 ARUKANA #2

    同学你好,并不是哦,同学贴出的是添加线程的规则,在该视频中老师也讲了参数中corePoolSize的含义,如下

    https://img1.sycdn.imooc.com//climg/61a1f39909c95b1414820508.jpg

    祝学习愉快~

    2021-11-27 18:29:20
  • 提问者 ARUKANA 回复 好帮手慕阿园 #3

    因为corePoolSize=10,而程序开始执行时线程数小于10,

    所以我的疑惑是,视频演示中pool-1-thread-X不是按顺序创建,似乎和《添加线程的规则》中所述“最开始线程总数小于corePoolSize时,即使有线程处于空闲状态,新任务到来时也会创建新的线程”矛盾?因为如果是“最开始线程总数小于corePoolSize时,即使有线程处于空闲状态,新任务到来时也会创建新的线程”的话,那么打印顺序应该是pool-1-thread-1,2,3,...,因为每到来一个打印线程名字的任务时都要创建一个新的线程。



    2021-11-27 23:14:15
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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