线程池的总结

2023-05-16

线程池的作用

1.限制工作线程的数目;
2.减少创建和销毁线程的次数;
3.线程可以被重复利用;
4.可以根据系统的承受能力来调整工作线程的数目;

配置线程池的静态工厂方法

1.newSingleTheadExecutor
创建单个线程的线程池;线程池中只有一个线程;适合顺序执行并输出任务的场景;没有并发执行
2.newFixedTheadExecutor
创建固定大小的线程池;每执行一个任务就会创建一个线程;当线程数达到线程池大小时就保持不变;只有核心线程。
3.newCachedTheadExecutor
创建具有缓存能力的线程池;当线程池大小超过了当前执行任务所需要的的线程,就会自动回收空闲的线程。当增加了新任务就会自动添加线程来执行。不会固定线程池的大小。
4.newScheduleTheadExecutor
创建一个大小无限的线程池;周期性执行任务的线程池。有核心线程也有非核心线程。

线程池和多线程的区别

1.线程池是在程序开始就创建多个线程,不用的时候就挂起;多线程是在任务到来的时候再创建。
2.线程池中的线程不会被回收,而多线程中的线程执行完任务后就会被回收;
3.线程池比多线程效率更高。

线程池的执行过程

1.当一个任务来到线程池,就会先选择核心线程去执行该任务;
2.一个新的任务到来时,首先判断核心线程是否还有,如果核心线程没有就会继续查看任务队列是否有空位;如果有则将任务放入任务队列。
3.当任务到来发现核心线程和任务队列都满了就判断线程池是否满了,如果没有满 就开启非核心线程来执行任务。
4.如果线程池满了,新任务会触发线程池中的饱和策略来想外抛出异常。

线程池的组成部分

1.线程池管理器:管理线程池中线程的创建、销毁和分配;
2.工作线程:核心线程和非核心线程
3.任务队列:阻塞队列
4.任务

线程池的几种阻塞队列

ArrayBlockingQueue:基于数组结构的阻塞队列
LinkedBlockingQueue:基于链表结构的阻塞队列
PriorityBlockingQueue:基于优先级的有序的阻塞队列
DelayBlockingQueue:
SynchronousQueue:不存储元素的阻塞队列,来一个处理一个。

核心线程和非核心线程的区别

核心线程不使用时不会被回收。非核心线程会被回收。

线程池和线程的多种状态

线程池:
1.running:线程池处于运行状态
2.shutdown:线程池不接受新任务。但是会处理堆积的任务
3.stop:线程池不接受新任务,也没有需要处理的任务,并且中段正在运行的任务;
4.tidying:所有任务都终止,并且任务数量为空
5.terminated:线程池彻底终止

线程:
1.新建(new)
2.就绪 (Runnable)执行线程对象 的t.start()方法;
3.运行(Running)线程获取到cpu资源
4.阻塞(Blocked)由于某种原因失去了cpu资源。
等待阻塞:调用了对象线程的wait()
同步阻塞: 获取了synchronized同步锁失败;
其他阻塞:调用线程对象的其他sleep() 、join()、yield() .(注意yield是将运行状态切换到就绪状态)
5.死亡(Dead)线程执行完或异常退出

wait()\ notify() \ notifyAll() \ sleep() \ join() \ yield()

wait():线程释放锁,进入等待即阻塞状态
notify(): 唤醒任意一个等待的线程
notifyAll():唤醒所有等待的线程
sleep(): 线程进入睡眠状态,但是不会释放锁;
join():调用其他线程的join()方法,就开始运行另一个线程就知道结束在运行该线程。会抛异常。
yield():将线程状态由运行状态转到就绪状态,让给与自己的优先级高的或同优先级的线程执行。不会抛异常

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线程池的总结 的相关文章

  • vue2 -- 子组件访问父组件的数据方法汇总

    场景 当一个父组件下 有多个子组件需要共享父组件内的某一项数据时 可以使用如下方法实现需求 方法一 使用props 在 Vue 2 中 子组件可以通过 props 属性接收父组件传递的数据 在子组件中使用 emit 方法来触发父组件的事件
  • 简单好用的在线接口 MOCK 平台

    挺好用的一个线上工具 基本mock用法 邮箱登录记录一下
  • nodejs -- koa框架

    koa下载安装 Koa 是一个基于 Node js 的 Web 框架 它提供了一组简洁而优雅的 API 使得编写 Web 应用程序变得更加容易和快捷 以下是如何使用 Koa 创建一个 Node js 项目的步骤 安装 Node js 首先
  • 高德、百度地图互联网可访问的瓦片地址

    ArcGIS上对外开放的瓦片地址网站 传送门 span class token literal property property http span span class token operator span span class to
  • VScode+Remote-SSH搭建远程开发环境

    最近项目需要 xff1a 多台本机控制远程电脑 xff0c 因此学习了一下在VScode中搭建一个远程调试环境 简单总结了一下 xff01 远程开发环境搭建 xff1a VScode 43 Remote SSH 1 下载Visual Stu
  • java.sql.SQLException: url not set

    出现这个问题的主要原因 xff0c 是因为代码中的 64 ConfigurationProperties prefix 61 34 spring datasource druid 34 和application properties配置文件
  • 交叉编译器--笔记

    一般我们用PC电脑上的ubuntu的gcc编译器是针对x86架构 xff0c 而再开发板上的编译是ARM架构的 xff0c 故需要一个可以在PC上运行的ARM架构的GCC编译器 xff08 交叉编译器 xff09 用这个GCC编译ARM架构
  • ensp配置FTP进行文件操作

    ensp配置FTP进行文件操作 首先配置设备之间的连通 接下来配置路由器为FTP Client 在本地创建一个FTP Huawei文件夹 xff0c 然后再创建一个子文件夹Config xff0c 再在里面创建一个test txt文件 xf
  • 改变世界的五位顶级程序员!

    点击上方 Java基基 xff0c 选择 设为星标 做积极的人 xff0c 而不是积极废人 xff01 源码精品专栏 原创 Java 2020 超神之路 xff0c 很肝 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析网络应用框
  • 你知道ping命令是如何工作的吗?

    点击上方 Java基基 xff0c 选择 设为星标 做积极的人 xff0c 而不是积极废人 xff01 每天 14 00 更新文章 xff0c 每天掉亿点点头发 源码精品专栏 原创 Java 2021 超神之路 xff0c 很肝 中文详细注
  • dashboard疏散主机提示报错:无法疏散主机...处理方法、openstack虚拟机状态卡在重启处理方法、openstack在数据库修改虚拟机状态的方法

    文章目录 dashboard疏散主机提示报错 无法疏散主机 处理方法 报错说明 状态卡在reboot状态 解决方法 登录nova数据库修改虚拟机信息 首先获取nova数据库的密码 登录nova数据库并做修改 验证信息是否修改成功 再次迁移并
  • 自学VUE(4)创建项目

    创建项目 1 检查电脑环境 node v npm v vue V cnpm v 2 创建项目 xff0c cd到桌面 xff0c 执行命令 xff1a vue init webpack firstVue 初始化一个项目 3 桌面获得一个项目
  • 前端请求后台报错400

    报错原因 xff1a 前端请求的字段名称或者字段类型和后台编写的实体类不一样 xff0c 或者前端提交的参数和后台需要的参数个数不匹配 xff0c 导致无法封装 xff0c 报错400 解决方法 xff1a 仔细对照前后端字段类型 xff0
  • Ubuntu终端文件管理工具ranger

    一 xff0c 安装 xff1a ubuntu使用apt get 安装 sudo apt get install ranger 二 xff0c 使用 ranger ranger 中有按键和命令两种操作方式 xff0c 按键是直接键入键盘上的
  • C# list根据字段生成排名

    需求分析 xff0c 我们要根据一个变量来生成排名 xff0c 变量数值相同则在同一名 xff0c 名数则跳过 xff0c 比如第一有两个 xff0c 那就不会有第二名 xff0c 直接到第三名 直接上代码 span class token
  • .net 6 web api项目添加日志(Serilog)管理,将日志输出到控制台、文件、数据库

    1 在nuget安装下面几个包 Serilog Serilog AspNetCore 用于日志输出到控制台 Serilog Formatting Compact 用于日志输出到mysql数据库 Serilog Sinks MySQL 用于日
  • GDB调试-新手笔记3

    ldd命令 43 readelf ldd 在制作自己的发行版时经常需要判断某条命令需要哪些共享库文件的支持 xff0c 以确保指定的命令在独立的系统内可以可靠的运行 ldd stack0 可以找到stack0程序使用的共享库 xff0c l
  • Spring源码分析(一)Spring的环境搭建与架构

    目录 一 Spring的基本信息1 1 Spring 概述1 2 架构 二 环境搭建2 1 gradle的安装与配置2 2 Spring源码构建 本图 xff1a 川西旅游中拍摄的 xff08 业余摄影 xff09 官网 xff1a Hom
  • RNA-seq:转录组数据分析处理(上)

    RNA seq xff1a 转录组数据分析处理 xff08 上 xff09 目录 RNA seq xff1a 转录组数据分析处理 xff08 上 xff09 一 流程概括二 准备工作1 fastq测序文件2 注释文件和基因组文件的获取 三
  • STM32串口数据接收 --环形缓冲区

    STM32串口数据接收 环形缓冲区 环形缓冲区简介 在单片机中串口通信是我们使用最频繁的 xff0c 使用串口通信就会用到串口的数据接收与发送 xff0c 环形缓冲区方式接收数据可以更好的保证数据丢帧率第 在通信程序中 xff0c 经常使用

随机推荐

  • Linux下驱动开发

    Linux下驱动开发 1 简介 驱动 xff0c 是指驱动计算机里软件的程序 驱动程序全称设备驱动程序 xff0c 是添加到操作系统中的特殊程序 xff0c 其中包含有关硬件设备的信息 驱动程序是操作系统与硬件连接的桥梁 设备驱动最通俗的解
  • openstack单网卡使用多IP说明、openstack虚拟机IP通网关但同网段IP不互通处理方法

    文章目录 openstack虚拟机IP通网关但同网段IP不互通处理方法问题描述处理方法 Openstack中单网卡使用多ip openstack虚拟机IP通网关但同网段IP不互通处理方法 问题描述 云平台的防火墙虚拟机部署再我们云平台上 x
  • Collections.singletonList使用方法

    方法注释 应用 xff1a 这个方法主要用于只有一个元素的优化 xff0c 减少内存分配 xff0c 无需分配额外的内存 xff0c 可以从SingletonList内部类看得出来 由于只有一个element 因此可以做到内存分配最小化 x
  • 如何修改电脑的MAC地址(手把手更改)

    打开控制面板 xff0c 显示如下 xff0c 然后点击 网络和Internet xff08 windows 43 r xff0c 然后输入control xff0c 按下回车 xff0c 即可打开控制面板 xff09 点击完 网络和Int
  • evo的快速安装Ubuntu 18.04

    由于一键安装成功后打开轨迹后报错 xff1a ERROR evo module evo main traj crashed no logfile written disabled 不会解决 xff0c 索性直接用源码安装方式 xff1a 如
  • 基于 SpringBoot + Vue 的音乐网站系统(源代码+数据库+思路文档)

    一 系统介绍 本项目分为管理员与普通用户两种角色 管理员角色包含以下功能 xff1a 后台对用户 歌曲 歌手 歌单信息的管理 用户角色包含以下功能 xff1a 音乐播放用户登录注册用户信息编辑 头像修改歌单打分歌单 歌曲评论歌单列表 歌手列
  • Linux下PS1设置

    PS1简介 PS1命令是linux系统中的一个全局变量 xff0c 用于定义用户命令行的字符显示 学名为 xff1a 默认提示符 盲猜Power Shell 1 PS1变量 span class token comment shell查看变
  • Linux内存管理

    Linux中的程序都是在进程中执行的 xff0c 而每个进程都有自己的虚拟地址空间 xff0c 进程中的内存操作 xff0c 比如访问 xff0c 插入数据都是在这块虚拟地址空间上操作的 虚拟地址空间 虚拟地址空间是一个进程所使用的虚拟内存
  • Maven库打包解决方案:No plugin found for prefix ‘install’ in the current project and in the plgin groups

    问题描述 我的外部本地包 xff0c 需要打包到我的maven库里 然后报错如下 No plugin found for prefix install in the current project and in the plgin grou
  • Ant Design Blazor表格高度自适应

    Ant Design Blazor表格高度自适应 一 先导入js 在 Host cshtml导入js lt component type 61 34 typeof App 34 render mode 61 34 ServerPrerend
  • Gson临时文件被删除造成的stackOverflowError

    错误内容 今天使用Gson序列化的时候出现了stackOverflowError的错误 xff0c 内容如下 xff1a at span class token class name span class token namespace c
  • tcpdump命令参数说明和使用实例、linux解析公网地址会卡顿一下解决方法

    文章目录 tcpdumptcpdump的参数选项基本返回值查看基本用法抓取指定网络接口的所有流量抓取指定网络接口指定主机地址 IP 域名 的所有流量只取出端口 3333 的联机数据包获取指定协议的数据包 如udp 在网口eth1上抓取源端口
  • Linux系统桌面环境(又称图形界面)有哪些?

    Linux系统有许多不同的图形用户界面 xff08 Graphical User Interface xff0c 简称GUI xff09 xff0c 又称桌面环境 以下几乎涵盖了所有的桌面环境 GNOME xff1a GNOME是Linux
  • 艾里斑大小与像元尺寸的匹配问题

    写给自己看的学习记录 xff1a 光具有波粒二象性 xff0c 由此衍生出了几何光学与衍射光学 在光学设计软件中 xff0c 最常用的判断标准是查看点列图的RMS半径以及MTF图的曲线 xff0c 这两者分别代表了两种传播性质的评价方式 在
  • visual studio 和visual studio code 的区别是什么?

    区别有三 xff1a 区别一 xff1a 含义不一样 Visual Studio xff08 简称VS xff09 是美国微软公司的开发工具包系列产品 xff0c 是一个基本完整的开发工具集 xff0c 它包括了整个软件生命周期中所需要的大
  • SpringBoot框架连接数据库实战(超详细)

    SpringBoot框架用于实战 xff08 可直接下载源码进行拓展 xff09 步骤 xff1a 创建数据库mr wen xff0c 新建两条测试数据创建SpringBoot项目编写代码块 xff0c 并进行单元测试 创建数据库mr we
  • JAVA课后习题(一)——我是歌手

    大家好 xff01 我是小黄 xff0c 很高兴又跟大家见面啦 xff01 今天更新的是 xff1a JAVA程序设计课后习题 我是歌手往期检索 xff1a 程序设计学习笔记 目录 创建时间 xff1a 2020年10月23日 软件版本 x
  • ffmpeg推流 av_dict_set 参数设置解析(降低延时、处理花屏、改善画面质量)(实时更新)

    一 关于影响时延的参数设置 1 preset xff1a 指定编码的配置 x264编码算法有很多可供配置的参数 xff0c 不同的参数值会导致编码的速度大相径庭 xff0c 甚至可能影响质量 为了免去用户了解算法 xff0c 然后手工配置参
  • JSP实验:三角形的边长,面积,周长

    我这里有一个问题 xff0c 如果不能构成三角形 xff0c 就应该不出现面积和周长 xff0c 但是我写不出来 编写两个JSP页面 xff1a inputTriangle jsp与showTriangle jsp inputTriangl
  • 线程池的总结

    线程池的作用 1 限制工作线程的数目 xff1b 2 减少创建和销毁线程的次数 xff1b 3 线程可以被重复利用 xff1b 4 可以根据系统的承受能力来调整工作线程的数目 xff1b 配置线程池的静态工厂方法 1 newSingleTh