线程池为甚么要用阻塞队列
线程池为甚么要用阻塞队列
- 一般队列只能保证作为一个有线长度的缓冲区,如果超过了缓冲区长度,就无法保留当前任务了,阻塞队列通过阻塞可以保留当前想要继续入队的任务,阻塞队列可以保证任务队列中没有任务时阻塞队列获取任务的线程(即线程池中没有任务时,阻塞核心线程),使得线程进入wait状态,释放cpu
- 线程创建的时候,需要获取全局锁,这个时候其他的线程就需要阻塞,影响整体性能。
阻塞队列主要是:有限的队列长度,队列满了,可以阻塞保留当前任务;队列为空,阻塞线程,保持核心线程不退出。
线程池如何超时:queue.poll(timeOut),当线程在过期时间内没有从队列中拉到任务,就会把当前线程标记为过期,下次循环直接回收,就是gettask任务返回null,主线程run方法退出while循环,执行结束,线程被jvm回收。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理