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

news/2023/11/28 13:51:38

🌈键盘敲烂,年薪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.ppmy.cn/news/1171401.html

相关文章

Netty 入门 — Bootstrap,一切从这里开始

上篇文章(Netty 入门 — 要想掌握 Netty,你必须知道它的这些核心组件)大明哥阐述了 Netty 的整体结构,从这篇文章开始大明哥就将这个整体进行拆分讲解,今天是第一个核心组件:Bootstrap。 一句话来概括 Boot…

深度学习_5_模型拟合_梯度下降原理

需求: 想要找到一条直线,能更好的拟合这一些点 如何确定上述直线就是最优解呢? 由计算机算出所有点与我们拟合直线的误差,常见的是均方误差 例如:P1与直线之间的误差为e1 将P1坐标带入直线并求误差得: 推广到所有点&a…

VMware虚拟机安装Ubuntu22.04教程(2023最新最详细)

目录 简介 1 VMware虚拟机下载与安装 2 Ubuntu操作系统安装与配置 2.1 Ubuntu虚拟机配置 2.2 Ubuntu操作系统安装 简介 Linux是一种自由和开放源代码的操作系统内核,被广泛应用于各种计算机系统中。它以稳定性、安全性和灵活性而闻名,并成为服务器…

双十一必买好物,这四款好物你值得拥有

随着科技的不断发展,智能家电已经成为我们生活中不可或缺的一部分。在双十一期间,各大品牌都会推出各种优惠活动,以更优惠的价格购买到心仪的智能家电。比如智能超声波清洗机,智能门锁,它们不仅提高了我们的生活质量&a…

【1++的Linux】之文件(三)

👍作者主页:进击的1 🤩 专栏链接:【1的Linux】 文章目录 一,磁盘结构二,磁盘的抽象结构三,文件系统四,文件的增删查改五,软硬链接六,动静态库1. **动态库和静…

Ubuntu 20.04 连不上网,没有网络图标

这篇文章good https://blog.csdn.net/weixin_46721287/article/details/126098278 我是使用虚拟机上网 这篇文章也是good https://zhuanlan.zhihu.com/p/580910152

如何提高webpack的构建速度?

一、背景 随着我们的项目涉及到页面越来越多,功能和业务代码也会随着越多,相应的 webpack 的构建时间也会越来越久 构建时间与我们日常开发效率密切相关,当我们本地开发启动 devServer 或者 build 的时候,如果时间过长&#xff…

html登录注册标签

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <h1>登录注册</h1> <form action"第一个网页.html" method"post&quo…

众和策略:题材股什么意思?

题材股是股票商场上的一个术语&#xff0c;许多刚接触股票出资的人可能对它不太熟悉。那么&#xff0c;题材股什么意思呢&#xff1f;在本文中&#xff0c;咱们将从多个角度剖析这个问题&#xff0c;帮忙读者更好地了解。 一、什么是题材股 题材股是指某个工作或主题的股票集结…

zoomlt使用

参考文章: ZoomIt使用教程_zoomit怎么使用_baomg_8774的博客-CSDN博客

Spring Security登录用户数据获取(4)

1、登录用户数据获取 登录成功之后&#xff0c;在后续的业务逻辑中&#xff0c;开发者可能还需要获取登录成功的用户对象&#xff0c;如果不使用任何安全管理框架&#xff0c;那么可以将用户信息保存在HttpSession中&#xff0c;以后需要的时候直接从HttpSession中获取数据。在…

Vue里面怎么使用站点地图Sitemap做SEO

在Vue中使用站点地图(Sitemap)来进行SEO优化的方法与在其他前端框架中类似。 1:安装vue-router:首先确保Vue应用程序正在使用vue-router来进行路由管理。使用以下命令安装它: npm install vue-router2:创建路由配置::Vue应用程序中需要创建一个路由配置文件。这个文件…

【Linux】32条指令带你玩转 Linux !

目录 1&#xff0c;whoami 2&#xff0c;who 3&#xff0c;pwd 4&#xff0c;ls 1&#xff0c;ls 2&#xff0c;ls -l 3&#xff0c;ls -a 4&#xff0c;ls -al 5&#xff0c;ls -d 6&#xff0c;ls -ld 5&#xff0c;clear 6&#xff0c;cd 1&#xff0c;cd 2&…

redis缓存基本使用和缓存问题解决

一、缓存 1、缓存使用 为了系统性能的提升&#xff0c;我们一般都会将部分数据放入缓存中&#xff0c;加速访问。而 db 承担数据落盘工作。 哪些数据适合放入缓存&#xff1f; &#xff08;1&#xff09;即时性、数据一致性要求不高的 &#xff08;2&#xff09;访问量大且更…

Java多线程案例

文章目录 Java多线程案例单例模式阻塞式队列定时器线程池 Java多线程案例 单例模式 单例模式能保证某个类在程序中只存在唯一一份实例, 而不会创建出多个实例 饿汉模式&#xff1a;类加载的同时, 创建实例 public class Singleton {private static Singleton instance new…

公众号留言功能怎么使用?如何开启?

为什么公众号没有留言功能&#xff1f;根据要求&#xff0c;自2018年2月12日起&#xff0c;新申请的微信公众号默认无留言功能。有些人听过一个说法&#xff1a;公众号粉丝累计到一定程度或者原创文章数量累计到一定程度就可以开通留言功能。其实这个方法是2018年之前才可以&am…

解码Java的垃圾回收:掌握GC机制,提升代码的稳定性与可伸缩性

1. GC是什么 JVM垃圾收集(Java Garbage Collection ) GC采用分代收集算法&#xff1a; 次数上频繁收集Young区次数上较少收集Old区基本不动Perm区 2. GC 算法总体概述 JVM在进行GC时&#xff0c;并非每次都对上面三个内存区域一起回收的&#xff0c;大部分时候回收的都是指…

老卫带你学---leetcode刷题(438. 找到字符串中所有字母异位词)

438. 找到字符串中所有字母异位词 问题&#xff1a; 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串&#xff08;包括相同的字符串&#xff09;。 …

港联证券:哪家证券公司开户好?

在现代社会&#xff0c;出资理财已经成为了一个不可或缺的部分。出资者在进行股票生意时&#xff0c;不可避免地需求选择一家证券公司进行开户。可是&#xff0c;哪家证券公司开户好&#xff1f;这是每个出资者都需求考虑的问题。本文将从多个角度分析&#xff0c;为您供给一些…

知识分享|分段函数线性化及matlab测试

目录 1 使用0-1变量将分段函数转换为线性约束 2 连续函数采用分段线性化示例 3 matlab程序测试 4 matlab测试结果说明 5 分段线性化应用 1 使用0-1变量将分段函数转换为线性约束 2 连续函数采用分段线性化示例 3 matlab程序测试 clc;clear all; gn10;tn1; x_pfsdpvar(1, t…
最新文章