当前位置: 首页 > news >正文

线程池的线程回收问题

首先,线程池里面分为核心线程和非核心线程。

核心线程是常驻在线程池里面的工作线程,它有两种方式初始化。

  • 向线程池里面添加任务的时候,被动初始化
  • 主动调用prestartAllCoreThreads方法

        当线程池里面的队列满了的情况下,为了增加线程池的任务处理能力。线程池会增加非核心线程。核心线程和非核心线程的数量,是在构造线程池的时候设置的,也可以动态进行更改。

        由于非核心线程是为了解决任务过多的时候临时增加的,所以当任务处理完成后,非核心线程处于空闲状态的时候,就需要回收。因为所有工作线程都是从阻塞队列中去获取要执行的任务,所以只要在一定时间内,阻塞队列没有任何可以处理的任务,那这个线程就可以结束了。

        这个功能是通过阻塞队列里面的poll方法来完成的。这个方法提供了超时时间和超时时间单位这两个参数当超过指定时间没有获取到任务的时候,poll方法返回null从而终止当前线程,完成线程回收。

        默认情况下,线程池只会回收非核心线程,如果希望核心线程也要回收,可以设置allowCoreThreadTimeOut这个属性为true,一般情况下我们不会去回收核心线程。因为线程池本身就是实现线程的复用,而且这些核心线程在没有任务要处理的时候是处于阻塞状态并没有占用CPU资源。

 

http://www.lryc.cn/news/105889.html

相关文章:

  • 盘点那些不想骑车的原因和借口。
  • 【深度学习Week3】ResNet+ResNeXt
  • Visual Studio 2022的MFC框架全面理解
  • C# 消息队列 (MSMQ) 进程之间的通信
  • 算法练习(4):牛客在线编程05 哈希
  • 数字信号处理——频谱分析
  • [软件工程] 架构映射战略设计方案模板
  • Springboot MongoDB 事务
  • SAP自建表日志
  • ansible-kubeadm在线安装单masterk8s v1.19-v1.20版本
  • mongodb docker 及常用命令
  • 最新版本mac版Idea 激活Jerbel实现热部署
  • 基于Ubuntu22.04部署bcache模式ceph
  • 根据URL批量下载文件并压缩成zip文件
  • 机器学习笔记之优化算法(六)线搜索方法(步长角度;非精确搜索;Glodstein Condition)
  • Ant Design Pro 封装网络请求
  • 命令模式——请求发送者与接收者解耦
  • css 利用模糊属性 制作水滴
  • 怎么才能提升自己工作能力?
  • Android Framework 之 Zygote
  • 二叉树的中序遍历 LeetCode热题100
  • IOS + Appium自动化教程
  • 100个精选Python实战项目案例,在线无偿分享
  • JSON语法
  • PostMan+Jmeter+QTP工具介绍及安装
  • 2023电赛E题视觉部分
  • 算法工程师岗位面试必备,讲透深度学习面试题,详解人工智能生成式任务与AI大模型面试题
  • JVM基础篇-虚拟机栈
  • KepwareEX配置API REST接口
  • 【python】python求解矩阵的转置(详细讲解)