线程问题

线程问题

1、当线程池初始化完毕后,当有任务的时候,会创建1个线程,核心线程设置5,那么下次再来线程,继续创建, ? 当5个线程都被创建了, 然后第一个线程回收到线程池中,下次再接收任务,还会重新创建线程吗?回收的线程会被销毁在线程池中吗?还是说,当来任务的时候,会一次性创建核心线程设置的数量?

2、线程池和连接池好像有点不太一样, 连接池是初始化的时候,一次性创建连接, 线程池是使用一个创建一个。

3、http://img1.sycdn.imooc.com//climg/60cc4ae109e11fcc18480132.jpg

max设置10,那么最多创建9个线程?预留的一个是为啥呢?

4、

通过设置corePoolSize和maxPoolSize相同,就可以创建固定大小的线程池。

这句话没理解, 这不是设置线程池中的配置吗? 和固定大小的线程池啥关系?不就是设置了量了吗​

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

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

1回答
好帮手慕小脸 2021-06-18 19:02:26

同学你好,

1、1)是的,是会创建─个新线程来运行新任务的。

2)线程数等于核心线程数时,如果继续添加新的任务,会将任务添加到阻塞队列 workQueue 中,等待调度

2、是的

3、并没有预留,这里可以参考如下举例:

线程池:核心池大小为5,最大池大小为10,队列为100。

因为线程中的请求最多会创建5个,然后任务将被添加到队列中,直到达到100;当队列已满时,将创建最新的线程maximumPoolSize,最多到10个线程,如果再来任务,就拒绝。

4、1)是的

2)corePoolSize:线程池的核心线程数量

maximumPoolSize:线程池的最大线程数

当上述两个内容创建的线程池大小相同时就会变成一个固定大小的线程池

祝学习愉快~

  • 提问者 rock221 #1

    线程的坐标是从0开始, 所以10个,就是0~9 对吧。

    总结下, 线程池是当接收请求后, 按照核心线程创建请求,一个请求创建一个, 那如果请求结束后, 是回收销毁,下次使用重写创建,还是在核心线程中等待呢? 

    2021-06-18 19:08:40
  • 好帮手慕小脸 回复 提问者 rock221 #2

    同学你好,

    1、并没有坐标这个说法。

    2、如果每一个请求都开启一个新线程的话,系统就要不断的进行线程的创建和销毁,有时花在创建和销毁线程上的时间会比线程真正执行的时间还长。而且当线程数量太多时,系统不一定能受得了。 所以通过重用线程池中的线程,来减少每个线程创建和销毁的性能开销。

    祝学习愉快~

    2021-06-19 14:13:26
  • 提问者 rock221 回复 好帮手慕小脸 #3

    当空闲的线程时长>keepAliveTime , 那这个线程就被销毁了吧。 如果<。则复用。 

    2021-06-19 14:15:08
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星

相似问题

登录后可查看更多问答,登录/注册

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

在线咨询

领取优惠

免费试听

领取大纲

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