JAVA线程池,ThreadPoolExecutor实现的四种线程池

matlab 用m_map画地形水深图 clear,clc %投影 m_proj('albers equal-area','lat',[5 43],'long',[105 125],'rect','on'); %加载水深文件 [CS,CH]=m_etopo2('contourf',[-7000:500:3000],'edgecolor','none'); %绘制高分辨率陆地和海岸线 m_gshhs_h('patch',[0.1 0.9 ... 阅读详情

线程池

在JAVA中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便。但是就会有一个问题,如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。

那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?这样Java线程池出现了。

new Thread的弊端:

a. 每次new Thread新建对象性能差。

b. 线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或oom。

c. 缺乏更多功能,如定时执行、定期执行、线程中断。

相比new Thread,线程池的好处:

a. 重用存在的线程,减少对象创建、消亡的开销,性能佳。

b. 可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。

c. 提供定时执行、定期执行、单线程、并发数控制等功能。

ThreadPoolExecutor详解

ThreadPoolExecutor完整构造方法是:

ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) 

corePoolSize - 核心池的大小,这个参数跟后面讲述的线程池的实现原理有非常大的关系。在创建了线程池后,默认情况下,线程池中并没有任何线程,而是等待有任务到来才创建线程去执行任务,除非调用了prestartAllCoreThreads()或者prestartCoreThread()方法,从这2个方法的名字就可以看出,是预创建线程的意思,即在没有任务到来之前就创建corePoolSize个线程或者一个线程。默认情况下,在创建了线程池后,线程池中的线程数为0,当有任务来之后,就会创建一个线程去执行任务,当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列当中。

maximumPoolSize - 线程池最大线程数,这个参数也是一个非常重要的参数,它表示在线程池中最多能创建多少个线程。

keepAliveTime - 表示线程没有任务执行时最多保持多久时间会终止。默认情况下,只有当线程池中的线程数大于corePoolSize时,keepAliveTime才会起作用,直到线程池中的线程数不大于corePoolSize,即当线程池中的线程数大于corePoolSize时,如果一个线程空闲的时间达到keepAliveTime,则会终止,直到线程池中的线程数不超过corePoolSize。但是如果调用了allowCoreThreadTimeOut(boolean)方法,在线程池中的线程数不大于corePoolSize时,keepAliveTime参数也会起作用,直到线程池中的线程数为0。

unit - 参数keepAliveTime的时间单位,有7种取值,在TimeUnit类中有7种静态属性:

TimeUnit.DAYS;               //天
TimeUnit.HOURS;             //小时
TimeUnit.MINUTES;           //分钟
TimeUnit.SECONDS;           //秒
TimeUnit.MILLISECONDS;      //毫秒
TimeUnit.MICROSECONDS;      //微妙
TimeUnit.NANOSECONDS;       //纳秒

workQueue - 一

三级等保网络拓扑图实战:从零搭建符合标准的医院安全架构 本文详细阐述了如何从零开始设计并搭建符合三级等保标准的医院网络安全架构。文章基于“一个中心,三重防护”的核心框架,深入解析了医院网络分区设计、安全域划分、关键安全设备选型与配置等实战要点,并提供了绘制专业网络拓扑图的技巧与等保测评准备指南,旨在帮助医院IT人员系统化地构建既合规又实用的纵深防御体系。 阅读详情

相关推荐

高通thermal-engine.conf配置详解:从虚拟传感器到CPU频率控制的完整指南

本文深入解析了高通thermal-engine.conf配置文件的架构与调优方法。从虚拟传感器的加权融合原理,到监控算法与CPU频率控制的多级策略,提供了完整的配置详解与实战调试指南。文章旨在帮助开发者与高级用户掌握底层温控逻辑,在性能与散热间实现精准平衡,并详细介绍了日志调试与场景化配置等高级技巧。

weixin_28327051的博客 457

线程池(ThreadPoolExecutor)详解

线程池线程池线程池种类:ThreadPoolExecuter类关系结构自定义线程池参数:线程池的大小(maximumPoolSize):JDK提供的线程池singleThreadPoolCachedThreadPoolfixedThreadPoolScheduledPool线程池使用示例:ThreadPoolExecuter源码解读ForkJoinPoolWorkStealingPool: 线程池 线程池种类: ThreadPoolExecutor ForkJoinPool-分解汇总任务,用于CPU密集型

qq_37450492的博客 4707

点云从入门到精通技术详解100篇-点云的特征检测(续)

对每个维度的序列分别计算 DTW 距离,最后。权重将距离限制在较小的范围内,对于时间跨度大的数据集,过度限制了点对点的路径,同的,因此不能用欧氏距离来计算两个多元时间序列之间的距离,本文选用的是动态时。到的股票数据是未知分类的,因此该数据的相似性分析缺少有效的评价方式,通常需要。时间序列,简而言之,就是与时间相关的数据的集合,应用在生活工作中的方方面。时间序列的分段线性化表示的难点在于如何找出分段点,目前,对于分段点的研究。经过分段线性化之后,每个多元时间序列的维度是相同的,但是每一维的长度是不。

getusushu的博客 313

java 常用线程池FixedThreadPool、SingleThreadExecutor、CachedThreadPool、ScheduledThreadPool

10.1 Executor框架简介 10.1.1 Executor框架的两级调度模型 在HotSpot VM的线程模型中,Java线程(java.lang.Thread)被一对一映射为本地操作系统线 程。Java线程启动时会创建一个本地操作系统线程;当该Java线程终止时,这个操作系统线程 也会被回收。操作系统会调度所有线程并将它们分配给可用的CPU。 10.1.2 Execut...

lbx1314ybfq的专栏 1350

java四种线程池的创建与使用,ThreadPoolExecutor的分析

Executors工厂类的四种线程池的创建,newFixedThreadPool、newSingleThreadExecutor、newScheduledThreadPool和newCachedThreadPool。 以及对ThreadPoolExecutor的分析。

Gedulding的博客 3826

ThreadPool四种线程池

线程池使用对象的概念,目的是减小对象的创建和注销的开支,减轻JVM的压力。 为什么使用线程池呢?因为newTread有很多弊端。 1.新建对象性能差; 2.线程之间缺乏统一管理,可能无限创建线程,相互之间竞争会带来过多的系统损耗,   到最后司机或者oom; 3.缺乏更多的功能,例如定时执行,定期执行,线程中断,可以基本理解为线程池扩展许多新功能; Java可以通过Execut

了吃好最子包 1万+

ThreadPoolExecutor 线程池

在开发服务器端软件项目时,软件经常需要处理执行时间很短而数目巨大的请求,如果为每一个请求创建一个新的线程,则会导致性能上的瓶颈。因为JVM 需要频繁地处理线程对象的创建和销毁,如果请求的执行时间很短,则有可能花在创建和销毁线程对象上的时间大于真正执行任务的时间,所以系统性能会大幅降低。JDK 5及以上版本提供了对线程池的支持,主要用于支持高并发的访问处理,并且复用线程对象。

m0_62943934的博客 3528

JAVA实现多线程的四种方式和 ThreadPoolExecutor线程池内容详解 七大参数 拒绝策略 自定义线程池

JAVA多线程的四种方式 线程池详细解析 JAVA多线程四种方式 java实现线程的4种方式: 1.继承Thread类 重写run方法 2.实现Runnable接口 实现run方法 3.继承Callable接口 实现call方法 使用futureTask调用 (有返回值/可处理异常) [以上三种在平常业务代码种均不使用.] [应该将所有的多线程异步任务都交给线程池执行] 4.线程池(线程复用;控制最大并发数;管理线程) 降低资源的消耗 通过重复利用已经创建好的线程降低线程的创建和销毁带来的

NeverGiveUp 445

Executors类创建四种常见线程池

文章目录线程池架构newSingleThreadExecutornewFixedThreadPoolnewCachedThreadPoolnewScheduledThreadPoolExecutors和ThreaPoolExecutor创建线程池的区别两种提交任务的方法executesubmit 线程池架构 上图是线程池的架构图。Java里面线程池的顶级接口是Executor,Executor并...

ThinkWon的博客 1万+

java executor 四种_Java ExecutorService四种线程池ThreadPoolExecutor机制

一、Java 线程池Java通过Executors提供四种线程池,分别为:1、newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。(线程最大并发数不可控制)2、newFixedThreadPool:创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。3、newScheduledThreadPool:创...

weixin_32350433的博客 260

线程池(ThreadPoolExecutor)

线程池(ThreadPoolExecutor) 线程池:提前创建好一组线程。 为什么需要线程池呢? 想象这么一个场景: 在学校附近新开了一家快递店,老板很精明,想到一个与众不同的办法来经营。店里没有雇人,而是每次有业务来了,就现场找一名同学过来把快递送了,然后解雇同学。这个类比我们平时来一个任务,起一个线程进行处理的模式。很快老板发现问题来了,每次招聘 + 解雇同学的成本还是非常高的。老板还是很善于变通的,知道了为什么大家都要雇人了,所以指定了一个指标,公司业务人员会扩张到 3 个人,但还是随业务

元宝的博客 287

java线程池ThreadPoolExecutor理解

Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。new...

dfyg28276的博客 242

Java ExecutorService四种线程池及自定义ThreadPoolExecutor机制

一、Java 线程池 Java通过Executors提供四种线程池,分别为:1、newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。(线程最大并发数不可控制);线程池为无限大,当执行第二个任务时若第一个任务已经完成,会复用执行第一个任务的线程,而不用每次新建线程。2、newFixedThreadPool:创建一个定...

weixin_30925411的博客 587

java多线程ThreadPoolExecutor的使用

java多线程4种创建多线程的方式1、继承Thread类2、实现Runnable接口3、实现Callable接口4、ThreadPoolExcutor线程池1、各参数含义2、队列3、四种拒绝策略 4种创建多线程的方式 1、继承Thread类 public class MyThread extends Thread { @Override public void run() { System.out.println("继承Thread类"); } } // 调用方式 n

qq_38533495的博客 460

Java多线程:ThreadPoolExecutor详解

ThreadPoolExecutor是JDK并发包提供的一个线程池服务,基于ThreadPoolExecutor可以很容易将一个Runnable接口的任务放入线程池中。 ThreadPoolExecutor的构建参数: public ThreadPoolExecutor(int corePoolSize, int maxi

天行健,君子以自强不息 4万+

java 线程池详解及四种线程池用法介绍

java 线程池详解      Executor框架是一种将线程的创建和执行分离的机制。它基于Executor和ExecutorService接口,及这两个接口的实现ThreadPoolExecutor展开,Executor有一个内部线程池,并提供了将任务传递到池中线程以获得执行的方法,可传递的任务有如下两种:通过Runnable接口实现的任务和通过Callable接口实现的任务。在这两种情况

学习学习再学习 1万+

Java线程池

Java线程池 参考资料: [1] Java并发编程:线程池的使用 [2] 十问十答:你真的了解线程池吗?

u014800975的博客 1186

一文总结线程池ThreadPoolExecutor

文章目录1. 概述2. 线程池核心设计与实现 参考文献: Java线程池实现原理及其在美团业务中的实践 java并发编程的艺术 1. 概述 好处 使用线程池可以带来一系列好处: 降低资源消耗:通过池化技术重复利用已创建的线程,降低线程创建和销毁造成的损耗。 提高响应速度:任务到达时,无需等待线程创建即可立即执行。 提高线程的可管理性:线程是稀缺资源,如果无限制创建,不仅会消耗系统资源,还会因为线程的不合理分布导致资源调度失衡,降低系统的稳定性。使用线程池可以进行统一的分配、调优和监控。 提供更多更强大

王小禾 393

Java线程池是怎么实现复用的?

Java线程池是怎么实现复用的? Java线程池,维护了一个线程池,每一个新的任务都会提交到线程池,由线程池进行调度和资源释放,这样的好处: 1.通过线程池,可以限制线程创建的数量,当创建许多的任务时,任务需要在线程池中进行排队。 2.通过线程池,统一管理任务调度以及异常的策略处理。 线程池简单例子 import java.util.concurrent.ExecutorService; im...

莫负时光 1302

threadpoolexecutor创建线程池_JAVA-多线程-彻底学会线程池ThreadPoolExecutor

ThreadPoolExecutor 讲解介绍ThreadPoolExecutor 类下有4个有参构造函数:讲解参数最多的构造函数:参数定义如下:corePoolSize :核心线程池大小maximumPoolSize: 最大线程池大小keepAliveTime : 线程最大空闲时间unit : TimeUnit 时间单位workQueue :BlockingQueue 线程等待队列threadF...

weixin_39955423的博客 223

Python数据分析可视化大作业-机票数据分析与可视化(高分项目)

Python数据分析可视化大作业-机票数据分析与可视化(高分项目),python机票价格数据分析及预测+pyQt5可视化展示,个人大三的期末大作业、经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。Python数据分析可视化大作业-机票数据分析与可视化(高分项目)Python数据分析可视化大作业-机票数据分析与可视化(高分项目)Python数据分析可视化大作业-机票数据分析与可视化(高分项目)Python数据分析可视化大作业-机票数据分析与可视化(高分项目)Python数据分析可视化大作业-机票数据分析与可视化(高分项目)Python数据分析可视化大作业-机票数据分析与可视化(高分项目)Python数据分析可视化大作业-机票数据分析与可视化(高分项目)个人大三的期末大作业、经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,也可作为课

pmsm1_ansys电机_ansys电机_ansys_自己搭的永磁同步电机ansys模型_

自己搭的永磁同步电机ansys模型,亲测可用,可以实用

上一篇: 多线程 - 生产者与消费者
下一篇: JAVA并发编程 之 CountDownLatch、CyclicBarrier、Semaphore、Callable和Future
二一点
博客等级 码龄17年 426粉丝 86原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二一点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值