线程池总结

线程池介绍:

把要使用的线程提前创建好,用完了也不要释放而是以备下次使用,就节省了创建/销毁线程的开销

在这个使用的过程中,并没有真的 频繁创建销毁,而是从线程池里,去线程使用,用完了还给线程池

线程池参数介绍

int corePoolSize              核心线程数(一个线程池里,最少得有多少个线程)

long maximumPoolSize    最大线程数(一个线程池里,最多最多能有多少个线程)

long keepAliveTime           保持存活时间

TimeUnit unit                      时间单位

BlockingQueue<Runnable> workQueue    和定时器一样,线程池中可以持有很多的任务

使用Runnable 来作为描述任务的主体

也可以设置PriorityBlockingQueue 带有优先级

ThreadFactory threadFactory  线程工厂

该类提供了方法 方法封装new Thread 的操作,并且同时给Thread设置一些属性

RejectedExecutionHandler handler  拒绝策略

工厂模式:也是一种常见的设计模式,通过专门的"共厂类"/"工厂对象"来创建指定类的对象 通过这个工厂类,来创建线程对象 通过静态方法封装new 操作

拒绝策略

1.继续添加新任务,直接抛异常,新旧任务都不执行

2.新的任务由添加任务的线程执行  新任务会执行,但不是线程池执行,而是调用者执行

3.丢弃最老任务

4.丢弃最新任务,按原来的执行,新加的不管

线程池的工作流程

1. 创建线程池:需要创建一个线程池对象,可以通过调用相应的线程池构造函数来实现。在创建线程池时,需要指定线程池的大小,即可以容纳的线程数量。

2. 提交任务:一旦线程池创建成功,就可以向线程池提交任务。任务可以是实现了Runnable接口或Callable接口的对象。线程池会根据任务的类型来执行相应的操作。

3. 任务调度:线程池会根据任务的提交顺序和线程池的状态来调度任务的执行。当有任务提交时,线程池会选择一个空闲的线程来执行任务。如果所有线程都在执行任务,而且线程池的大小已经达到上限,新提交的任务将会进入等待队列,等待有空闲线程时再执行。

4. 线程执行任务:线程池中的线程会从等待队列中获取任务并执行。线程执行任务的过程包括调用任务的run方法或call方法,并处理任务的返回结果(如果有)。

5. 任务完成:当任务执行完成后,线程会返回线程池,并准备接受新的任务。线程池会根据需要继续调度任务的执行,直到线程池被显式关闭。

使用Executors 创建常见的线程池

ExecutorService service = Executors.newFixedThreadPool(4);
service.submit(new Runnable() {
      @Override
      public void run() {
          System.out.println("hello");
      }
});
    

2.按需创建,不用设置固定值,用完也不会立即销毁,以备后用.

Executors.newCachedThreadPool();


3.单个线程池 创建只包含单个线程的线程池.

Executors.newSingleThreadExecutor();

4.设定 延迟时间后执行命令,或者定期执行命令. 是进阶版的 Timer.

Executors.newScheduledThreadPool(1);//定时器 通过线程池里的若干个线程去完成定时器的任务

什么时候使用Executors 什么时候使用ThreadPoolExecutor

简单使用一下时 用Executors     希望高度定制化时 用TreadPoolExecutor

创建线程池的时候,很多时候需要设定线程池的数量,这个数量设置多少合适?

只要是具体的数字,那就都是错的

由于程序的复杂性,很难直接对吸纳城池的线程数量进行估算,更合适的做法,通过实验/测试的做法找到合适的线程数目,尝试给线程池,设定不同的线程数目,分别进行性能测试,衡量每种线程数目下,总的时间开销,和系统资源占用的开销,找到这两者之间的合适的值

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/422199.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《梦幻西游》本人收集的34个单机版游戏,有详细的视频架设教程,值得收藏

梦幻西游这款游戏&#xff0c;很多人玩&#xff0c;喜欢研究的赶快下载吧。精心收集的34个版本。不容易啊。里面有详细的视频架设教程&#xff0c;可以外网呢。 《梦幻西游》本人收集的34个单机版游戏&#xff0c;有详细的视频架设教程&#xff0c;值得收藏 下载地址&#xff1…

conda激活环境失败解决办法

问题如下&#xff1a;conda activate 环境 报错了&#xff0c;应该是由于上次没有conda deactivate导致的&#xff0c;提示说close and restart shell。因此&#xff0c; 输入exit,退出shell 再重新打开终端即可&#xff0c;此时输入conda activate 环境名&#xff0c;就到了虚…

动态规划|【路径问题】|931.下降路径最小和

目录 题目 题目解析 思路 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 代码 题目 931. 下降路径最小和 给你一个 n x n 的 方形 整数数组 matrix &#xff0c;请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开…

基于devfreq framework的GPU调频

AI时代已经来临&#xff0c;在日益增长的算力需求下&#xff0c;GPU已经成为AI世界不可或缺的工具&#xff0c;而移动端高渲染高帧应用也对移动端GPU提出越来越高的要求&#xff0c;本文将以高通的adreno gpu为例对GPU的调频进行介绍。 在介绍之前&#xff0c;建议先阅读本文章…

2024年腾讯云新用户和老用户优惠代金券免费领取,共14张代金券

腾讯云代金券领取渠道有哪些&#xff1f;腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券&#xff0c;大家也可以在腾讯云百科蹲守代金券&#xff0c;因为腾讯云代金券领取渠道比较分散&#xff0c;腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…

电子科技大学《数据库原理及应用》(持续更新)

前言 电子科技大学的数据库课程缩减了部分的课时&#xff0c;因此&#xff0c;可能并不适合所有要学习数据库的宝子们&#xff0c;但是&#xff0c;本人尽量将所有数据库的内容写出来。本文章适用于本科生的期中和期末的复习&#xff0c;电子科技大学的考生请在复习前先看必读…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:位置设置)

设置组件的对齐方式、布局方向和显示位置。 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 align align(value: Alignment) 设置容器元素绘制区域内的子元素的对齐方式。 卡片能力&#xff1a; 从API…

代码随想录第二十五天 78.子集 90.子集II 491.非递减子序列

LeetCode 78 子集 题目描述 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&…

【Spring】spring中怎么解决循环依赖的问题

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Spring ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 解决步骤 考虑 结语 我的其他博客 前言 在软件开发中&#xff0c;依赖注入是一种常见的设计模式&#xff0c;它可以帮助我们管…

SQL Server 开发环境配置教程(SSMS+SQL Prompt)

背景 记录一下 SQL Server 常用开发软件 体验了各种数据库IDE(DBeaver、Navicat、DataGrip)之后综合下来还是感觉 SSMSSQL Prompt 对于 SQL Server 最好用&#xff0c;所以在此记录一下配置过程 数据库可视化管理工具SSMS 官方下载地址&#xff1a; https://learn.microsoft…

设计模式-结构模式-装饰模式

装饰模式&#xff08;Decorator Pattern&#xff09;&#xff1a;动态地给一个对象增加一些额外的职责&#xff0c;就增加对象功能来说&#xff0c;装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型模式。 //首先&#xff0c;定义一个组件接口&#xff1a; public in…

简单求和计算器

其实对于计算器的写法在C语言阶段就已经有了&#xff0c;但是&#xff0c;在目前阶段《前后端交互》&#xff0c;这算是一种全新的写法&#xff0c;毕竟将数据从前端返回给后端&#xff0c;然后再将数据返回给前端&#xff0c;都涉及到一些参数的交互&#xff0c;值得我们学习深…

qt5-入门-使用拖动方式创建Dialog

参考&#xff1a; C GUI Programming with Qt 4, Second Edition 本地环境&#xff1a; win10专业版&#xff0c;64位&#xff0c;Qt5.12 目录 实现效果基本流程逐步实操1&#xff09;创建和初始化子部件2&#xff09;把子部件放进布局中3&#xff09;设置tab顺序4&#xff09…

LeetCode:2368. 受限条件下可到达节点的数目(dfs Java)

目录 2368. 受限条件下可到达节点的数目 题目描述&#xff1a; 实现代码与解析&#xff1a; DFS 原理思路&#xff1a; 2368. 受限条件下可到达节点的数目 题目描述&#xff1a; 现有一棵由 n 个节点组成的无向树&#xff0c;节点编号从 0 到 n - 1 &#xff0c;共有 n - …

【python】python懂车帝数据可视化(代码+报告)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

select,poll和epoll有什么区别

它们都是NIO中多路复用的三种实现机制&#xff0c;是由linux操作系统提供的。 用户空间和内核空间&#xff1a;操作系统为了保证系统安全&#xff0c;将内核分为两个部分&#xff0c;一个是用户空间&#xff0c;一个是内核空间。用户空间不能直接访问底层的硬件设备&#xff0…

qt 5.15版本安装

1.qt5.15版本安装 2.安装慢时&#xff0c;切换到清华镜像源&#xff1a;.\qt-unified-windows-x64-online.exe --mirror https://mirrors.tuna.tsinghua.edu.cn/qt/ 3.没有qt 5.15版本在旁边进行筛选&#xff0c;只选archive

【多线程】CAS详解

目录 &#x1f334;什么是 CAS&#x1f338;CAS 伪代码 &#x1f38d;CAS 是怎么实现的&#x1f340;CAS 有哪些应⽤&#x1f338;实现原子类&#x1f338;实现自旋锁 &#x1f333;CAS 的 ABA 问题&#x1f338;**什么是 ABA 问题**&#xff1f;&#x1f338;ABA 问题引来的 B…

你心中的韩剧TOP1是哪一部

关注公众号&#xff1a;萌番bilfun&#xff0c;发送影片名称&#xff0c;即可获取资源链接 【2024最新韩剧来袭&#xff0c;准备好迎接心灵的震撼了吗&#xff1f;】 韩剧迷们&#xff0c;你们期待已久的2024最新韩剧终于来了&#xff01;准备好迎接心灵的震撼了吗&#xff1f…

【嵌入式学习】网络编程day03.02

一、项目 1、TCP机械臂测试 #include <myhead.h> #define SER_IP "192.168.126.32" #define SER_PORT 8888 #define CER_IP "192.168.126.42" #define CER_PORT 9891 int main(int argc, const char *argv[]) {int wfd-1;//创建套接字if((wfdsocke…