首页 > 其他分享 >线程池中阻塞队列的作用?为什么是先添加列队而不是先创建最大线程?

线程池中阻塞队列的作用?为什么是先添加列队而不是先创建最大线程?

时间:2023-03-18 15:13:19浏览次数:41  
标签:10 正式 队列 阻塞 池中 任务 线程 列队

线程池中阻塞队列的作用:
1.⼀般的队列只能保证作为⼀个有限⻓度的缓冲区,如果超出了缓冲⻓度,就⽆法保留当前的任务了,阻塞队列通过阻塞可以保留住当前想要继续⼊队的任务。
2.阻塞队列可以保证任务队列中没有任务时阻塞获取任务的线程,使得线程进⼊wait状态,释放cpu资源。
3.阻塞队列⾃带阻塞和唤醒的功能,不需要额外处理,⽆任务执⾏时,线程池利⽤阻塞队列的take⽅法挂起,从⽽维持核⼼线程的存活、不⾄于⼀直占⽤cpu资源
为什么是先添加列队而不是先创建最大线程?
在创建新线程的时候,是要获取全局锁的,这个时候其它的就得阻塞,影响了整体效率。
 

就好⽐⼀个企业⾥⾯有10个(core)正式⼯的名额,最多招10个正式⼯,要是任务超过正式⼯⼈数(task > core)的情况下,⼯⼚领导(线程池)不是⾸先扩招⼯⼈,还是这10⼈,但是任务可以稍微积压⼀下,即先放到队列去(代价低)。10个正式⼯慢慢⼲,迟早会⼲完的,要是任务还在继续增加,超过正式⼯的加班忍耐极限了(队列满了),就的招外包帮忙了(注意是临时⼯)要是正式⼯加上外包还是不能完成任务,那新来的任务就会被领导拒绝了(线程池的拒绝策略)。 

 

 

标签:10,正式,队列,阻塞,池中,任务,线程,列队
From: https://www.cnblogs.com/89564f/p/17230652.html

相关文章

  • c++ 影响多线程速度的因素记录
    目录0.序言1.缓存行同步问题/共享数据竞争1.1测试代码1.2测试逻辑1.3测试结果1.4小结2.任务颗粒度过小问题2.1测试代码2.1测试逻辑2.2测试结果2.3小结3.缓存未......
  • 谈谈线程间的协作(wait/notify/sleep/yield/join)
    线程的状态Java中线程中状态可分为五种:New(新建状态),Runnable(就绪状态),Running(运行状态),Blocked(阻塞状态),Dead(死亡状态)。New:新建状态,当线程创建完成时为新建状态,即newThread......
  • 线程间通信
    参考:https://zhuanlan.zhihu.com/p/452313580https://zhuanlan.zhihu.com/p/34362413https://zhuanlan.zhihu.com/p/151289085https://www.cnblogs.com/bearbrick0/p/1......
  • 为什么用线程池?解释一下线程池参数?
    1、降低资源消耗;提高线程利用率,降低创建和销毁线程的消耗。2、提高响应速度;任务来了,直接有线程可用可执行,而不是先创建线程,再执行3、提高线程的可管控性;线程是稀缺资源,使......
  • 为什么用线程池?解释一下线程池参数?
    1、降低资源消耗;提高线程利用率,降低创建和销毁线程的消耗。2、提高响应速度;任务来了,直接有线程可用可执行,而不是先创建线程,再执行3、提高线程的可管控性;线程是稀缺资源,使......
  • 谈谈ConcurrentHashMap是如何保证线程安全的?
    jdk1.7中是采用Segment+HashEntry+ReentrantLock的方式进行实现的,而1.8中放弃了Segment臃肿的设计,取而代之的是采用Node+CAS+Synchronized来保证并发安全进行实现......
  • 守护线程
    packageedu.wtbu;//测试守护线程//上帝守护你publicclassDemo07{publicstaticvoidmain(String[]args){Godgod=newGod();Youyou=new......
  • 线程的优先级
    packageedu.wtbu;//测试线程的优先级publicclassDemo06{publicstaticvoidmain(String[]args){//Thread.MAX_PRIORITY=10//Thread.Min_PRIOR......
  • 线程停止
    packageedu.wtbu;publicclassDemo01implementsRunnable{//1.设置一个标识位privatebooleanflag=true;@Overridepublicvoidrun(){inti......
  • 说一下线程池内部工作原理(ThreadPoolExecutor)
    ThreadPoolExecutor构造方法的参数corePoolSize:线程池的核心线程数,说白了就是,即便是线程池里没有任何任务,也会有corePoolSize个线程在候着等任务。maximumPoolSize:最大......