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

[java进阶]——线程池的使用,自定义线程池

🌈键盘敲烂,年薪30万🌈

目录

一、线程池的存在意义

 二、线程池的使用

2.1线程池的核心原理

2.2线程池的代码实现

三、自定义线程池

3.1线程池的参数详解

3.2线程池的执行原理

3.3灵魂两问

3.4线程池多大合适

3.5拒绝策略


一、线程池的存在意义

系统创建一个线程的成本是比较高的,因为它涉及到与操作系统交互,当程序中需要创建大量生存期很短暂的线程时,频繁的创建和销毁线程对系统的资源消耗有可能大于业务处理是对系统资源的消耗

 二、线程池的使用

2.1线程池的核心原理

创建一个池子,池子是空的

提交任务时,池子会创建线程对象,任务执行完毕,将线程归还给池子,待下一个线程使用

提交任务时,池子中没有空闲线程,也无法创建新的线程,该任务就会排队等待

2.2线程池的代码实现

1.创建线程池

2.提交任务 

3.所有任务执行完毕,关闭线程

public class Test1 {public static void main(String[] args) throws InterruptedException {//创建线程池ExecutorService pool1 = Executors.newCachedThreadPool();//创建指定数量的线程池ExecutorService pool2 = Executors.newFixedThreadPool(3);//提交任务pool2.submit(new Myrunable());pool2.submit(new Myrunable());pool2.submit(new Myrunable());pool2.submit(new Myrunable());pool2.submit(new Myrunable());//销毁线程池pool2.shutdown();//提交任务pool1.submit(new Myrunable());Thread.sleep(1000);pool1.submit(new Myrunable());Thread.sleep(1000);pool1.submit(new Myrunable());Thread.sleep(1000);//销毁线程池pool1.shutdown();}

三、自定义线程池

java把线程池封装为ThreadPoolExecutor类,利用构造方法创建线程池对象

3.1线程池的参数详解

3.2线程池的执行原理

3.3灵魂两问

一问:先提交的任务一定先被执行吗?

二问:临时线程何时创建?

答:

先提交任务不一定先执行,因为先提交的任务可能在等待队列中等待,而后提交的任务交给临时线程处理

当等待队列已满,创建临时线程

3.4线程池多大合适

CPU密集型的:最大并行数+1

I/O密集型的:最大并行数*cpu期望利用率*总时间/CPU计算时间

//获取虚拟机可获得的线程数

//我的电脑就是4核4线的

int count = Runtime.getRuntime().availableProcessors();

System.out.println(count);

3.5拒绝策略

当线程池中总线程数都在使用且等候队列也已满,触发拒绝策略

📕总结

以上就是学习线程池的相关内容,欢迎批评指正

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

相关文章:

  • Linux 进程切换与命令行参数
  • Python基础入门例程6-NP6 牛牛的小数输出
  • 传奇游戏常见问题解决办法
  • 2310D的dll问题
  • 包管理工具
  • Qt第六十五章:自定义菜单栏的隐藏、弹出
  • element table中嵌套el-select 无法选择问题
  • 2.6.C++项目:网络版五子棋对战之数据管理模块-游戏房间管理模块的设计
  • 计算机视觉中的数据预处理与模型训练技巧总结
  • GeoHash分享
  • 【超详细】CentOS 7安装MySQL 5.7【安装及密码配置、字符集配置、远程连接配置】
  • Elasticsearch 8.X 分词插件版本更新不及时解决方案
  • Delete `␍`eslintprettier/prettier
  • 4种实用的制作URL 文件的方法
  • css总结
  • [C语言]排序的大乱炖——喵喵的成长记
  • Docker 网络与Cgroup资源限制
  • D - United We Stand
  • 【1.总纲】
  • I/O模型之非阻塞IO
  • 2023版 STM32实战11 SPI总线读写W25Q
  • Spring Security认证源码解析(示意图)
  • 2023.10.22 关于 定时器(Timer) 详解
  • 【STM32】GPIO控制LED(寄存器版)
  • Spring Boot OAuth 2.0整合—高级配置
  • 软考-虚拟专用网原理与应用
  • clock_property 时钟的常用属性
  • 平板有必要买触控笔吗?推荐的ipad手写笔
  • Qt扫描-QMoive 理论总结
  • 类似东郊到家预约家政保洁小程序搭建