Java 并发总结——线程池

一、线程池

在程序启动的时候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程

(1)线程池的作用
1、降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
2、提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
3、提高线程的可管理性。
(2)常用线程池

ExecutorService 是主要的实现类

1、newSingleThreadExecutor

创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务, 保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行
适用场景:任务少 ,并且不需要并发执行
2、newCachedThreadPool

创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程.
适用场景:处理任务速度 > 提交任务速度,耗时少的任务(避免无限新增线程)
3、newFixedThreadPool

创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
4、newScheduledThreadPool

创建一个定长线程池,支持定时及周期性任务执行

(3)ThreadPoolExecutor构造方法参数说明

1、corePoolSize

核心线程数,默认情况下核心线程会一直存活,即使处于闲置状态也不会受存keepAliveTime限制。除非将allowCoreThreadTimeOut设置为true。
2、maximumPoolSize

线程池所能容纳的最大线程数。超过这个数的线程将被阻塞。当任务队列为没有设置大小的LinkedBlockingDeque时,这个值无效。
3、keepAliveTime

非核心线程的闲置超时时间,超过这个时间就会被回收。
4、unit

指定keepAliveTime的单位,如TimeUnit.SECONDS。当将allowCoreThreadTimeOut设置为true时对corePoolSize生效。
5、workQueue

线程池中的任务队列,常用的有三种队列,SynchronousQueue,LinkedBlockingDeque,ArrayBlockingQueue。

6、threadFactory

线程工厂,提供创建新线程的功能。ThreadFactory是一个接口,只有一个方法

(4)线程池原理
1、当前池大小 poolSize 小于 corePoolSize ,则创建新线程执行任务。
2、当前池大小 poolSize 大于 corePoolSize ,且等待队列未满,则进入等待队列
3、当前池大小 poolSize 大于 corePoolSize 且小于 maximumPoolSize ,且等待队列已满,则创建新线程执行任务。
4、当前池大小 poolSize 大于 corePoolSize 且大于 maximumPoolSize ,且等待队列已满,则调用拒绝策略来处理该任务。
线程池里的每个线程执行完任务后不会立刻退出,而是会去检查下等待队列里是否还有线程任务需要执行,如果在 keepAliveTime 里等不到新的任务了,那么线程就会退出。
(5)Executor拒绝策略
1、AbortPolicy

为java线程池默认的阻塞策略,不执行此任务,而且直接抛出一个运行时异常,切记ThreadPoolExecutor.execute需要try catch,否则程序会直接退出.
2、DiscardPolicy

直接抛弃,任务不执行,空方法
3、DiscardOldestPolicy

从队列里面抛弃head的一个任务,并再次execute 此task。
4、CallerRunsPolicy

在调用execute的线程里面执行此command,会阻塞入
用户自定义拒绝策略:实现RejectedExecutionHandler,并自己定义策略模式

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EF Core:一统SQL和NoSQL数据库

推出EF Core的初衷之一,就是开发出一种可在很少甚至不更改代码的情况下使用SQL和NoSQL数据库的模型。Microsoft正向此目标迈出第一步,发布了用于Azure Cosmos DB的实验性EF提供程序(provider)。据EF 2.1路线图介绍:Cos…

P3470 [POI2008]BBB-BBB【线段树,贪心】

正题 题目链接:https://www.luogu.org/problem/P3470 题目大意 一个−-−序列,表示111,−-−表示−1-1−1。sis_isi​表示到第iii个的前缀和,要求 qsnp且qsi≥0(i∈[1..n])qs_np且qs_i\geq 0(i\in[1..n])qsn​p且qsi​≥0(i∈[1..n]) 然后…

Java 并发总结——进程与线程

一、进程与线程 (1)线程与进程 进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。进程实体由程序段, 数据段 PCB(进程控制块)组成。 线程可以看做轻量级进程,…

.NET Core使用skiasharp文字头像生成方案(基于docker发布)

一、问题背景目前.NET Core下面针对于图像处理的库微软并没有集成,在.NET FrameWork下我们已经习惯使用System.Drawing类库做简单的图像处理,到了.NET Core下一脸懵逼的我,只能百度谷歌看看有没啥解决方案,好在网上资料也多&#…

jzoj6375-华灵「蝶妄想」【结论题】

正题 题目大意 n∗mn*mn∗m填(((或者)))。求一个方案使得最多的行和列匹配。 解题思路 我们先考虑nnn或mmm为奇数,那么显然奇数的肯定不必配,那么就只需要考虑行或列即可。 若nnn和mmm都为偶数时 我们发现在边边的行列不可能都匹配上,那就…

C# - Span 全面介绍:探索 .NET 新增的重要组成部分

假设要公开特殊化排序例程,以就地对内存数据执行操作。可能要公开需要使用数组的方法,并提供对相应 T[] 执行操作的实现。如果方法的调用方有数组,且希望对整个数组进行排序,这样做就非常合适。但如果调用方只想对部分数组进行排序…

Java 并发总结——AQS

一、AQS Java并发包(JUC)中提供了很多并发工具,ReentrangLock、Semaphore、CountDownLatch,它们的实现都用到了一个共同的基类——AbstractQueuedSynchronizer,简称AQS。 AQS是一个用来构建锁和同步器的框架&#xf…

P4427-[BJOI2018]求和【LCA】

正题 题目大意:https://www.luogu.org/problem/P4427 题目大意 一棵树,每次给一条路径,求路径上每个点的深度的kkk次方的和。 解题思路 路径上分成两条深度连续的链,所以我们可以先预处理出kkk次方的前缀和。 然后LCALCALCA就好了。 code…

C#中DateTime的缺陷与代替品DateTimeOffset

C#中的DateTime在逻辑上有个非常严重的缺陷:> var d DateTime.Now;> var d2 d.ToUniversalTime();> d d2false> d.Equals(d2);false在C#交互模式中输入以上代码,可以发现尽管一个是本地时间(d),一个是U…

Java SSL与TLS客户端证书配置

一、TLS安全概念 (1)PKI PKI是 Public Key Infrastructure的简称,意思是公钥基础设施。 公钥基础设施是提供公钥加密和数字签名服务的系统或平台,目的是为了管理密钥和证书。通过证书和秘钥来确认通讯双方是否可信任。 &#x…

P3901-数列找不同【模拟】

正题 题目链接:https://www.luogu.org/problem/P3901 题目大意 一个序列AAA&#xff0c;每次询问一个区间求这个区间的数是否各不相同。 解题思路 用lastilast_ilasti​表示前一个与iii相同数的位置。 然后Lastimax{lastj}(j<i)Last_imax\{last_j\}(j<i)Lasti​max{la…

Java RSA私钥的格式pkcs1和pkcs8、PrivateKey转换

&#xff08;&#xff09;一、私钥格式 &#xff08;1&#xff09;pkcs1 格式&#xff1a; -----BEGIN RSA PRIVATE KEY----- ... -----END RSA PRIVATE KEY----- &#xff08;2&#xff09;pkcs8 格式&#xff1a; -----BEGIN PRIVATE KEY----- ... -----END PRIVATE KE…

重磅消息-Service Fabric 正式开源

微软的Azure Service Fabric的官方博客在2017.3.24日发布了一篇博客 Service Fabric .NET SDK goes open source &#xff0c;介绍了社区呼声最高的Service Fabric开源的情况以及当前的情况&#xff0c;当时开源了Service Fabric的.NET SDK部分&#xff0c;社区一直在期盼着Ser…

Java 证书pem转KeyStore、jks文件

一、服务端pem转KeyStore CertificateFactory certificateFactory CertificateFactory.getInstance("X.509");FileInputStream caInputStream new FileInputStream(caPath);List<X509Certificate> caList certificateFactory.generateCertificates(caInput…

牛客国庆集训派对day6T A- 2016【矩阵乘法】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1111/A 题目大意 2∗22*22∗2的矩阵AAA&#xff0c;求AnA^nAn 解题思路 我们将其十进制的转化过来&#xff0c;如 A2016(A103)2∗(A10)∗(A)6A^{2016}(A^{10^3})^2*(A^{10})*(A)^6A2016(A103)2∗(A10)∗(A)6 这样时间复杂…

.NET Core 配置Configuration杂谈

前言.NET Core 在配置文件的操作上相对于.NET Framework做了不少改变&#xff0c;今天来聊一聊。关于Configuration的Package都是以Microsoft.Extensions.Configuration开头的支持多种方式的配置&#xff0c;包括内存、Json文件、XML文件等等&#xff0c;今天我们主要用Json格式…

Java Jenkins Api

一、Maven <dependency><groupId>com.cdancy</groupId><artifactId>jenkins-rest</artifactId><version>0.0.20</version> </dependency> github地址&#xff1a;https://github.com/cdancy/jenkins-rest 如果需要最新的代…

秘密:从程序员到领导者的微妙之处

读到一篇关于程序员、领导力和领导者的好文章&#xff0c;翻译过来分享下。借用一句文中的话&#xff1a;“好吧&#xff0c;我只是个程序员&#xff0c;为什么需要领导&#xff1f;” &#xff0c;读完你就知道了。做一个优秀的领导者可能不是大部分程序员会立即认同的东西。许…

牛客国庆集训派对day6TJ-DefenseTower【贪心】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1111/J 题目大意 一棵树&#xff0c;每个点有一个威力值&#xff0c;每次破坏一个点会受到与它相连没有破坏的点的威力值之和的伤害。求破坏所有点的最小伤害。 解题思路 因为是一棵树&#xff0c;所有我们可以看为每条边…

K8S Learning(1)——简介

一、Kubernetes kubernetes&#xff0c;是一个全新的基于容器技术的分布式架构领先方案&#xff0c;是谷歌严格保密十几年的秘密武器——Borg系统的一个开源版本&#xff0c;于2014年9月发布第一个版本&#xff0c;2015年7月发布第一个正式版本。 kubernetes的本质是一组服务…