JAVA多线程实现-可回收缓存线程池(newCachedThreadPool)

实现多线程的几种方式 实现多线程有以下四种方式: 1.继承Thread类 2.实现Runnable接口 3.实现Callable接口 4.线程池:提供了一个线程队列,队列中保存着所有等待状态的线程。避免了创建与销毁额外开销,提高了响应的速度。 体系结构: java.util.concurrent.Executor : 负责线程的使用与调度的根接口 |–ExecutorService 子接口: 线程池的主要接口 |–Th... 阅读详情

        在前两篇博客中介绍了单线程化线程池(newSingleThreadExecutor)、可控最大并发数线程池(newFixedThreadPool)。下面介绍的是第三种newCachedThreadPool——可回收缓存线程池。

        在JAVA文档中是这样介绍可回收缓存线程池的:创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。调用 execute 将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟(默认)未被使用的线程。因此,长时间保持空闲的线程池不会使用任何资源。(可以通过java.util.concurrent.ThreadPoolExecutor类的构造方法构造更加具体的类,例如指定时间参数)

        创建线程本身需要很多资源,包括内存,记录线程状态,以及控制阻塞等等。因此,相比另外两种线程池,在需要频繁创建短期异步线程的场景下,newCachedThreadPool能够复用已完成而未关闭的线程来提高程序性能。

newCachedThreadPool使用方法与其他两种线程池使用方法类似,基本使用代码如下所示:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class NewCachedThreadPoolExecutor {

	public static void main(String[] args) {
		ExecutorService cachedThreadExecutor = Executors.newCachedThreadPool();
		for (int i = 0; i < 10; i++) {
			final int index = i;
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e1) {
				e1.printStackTrace();
			}
			cachedThreadExecutor.execute(new Runnable() {
				@Override
				public void run() {
					System.out.println(Thread.currentThread().getName() + ": index = " + index);
				}
			});
		}
		cachedThreadExecutor.shutdown();
		
	}

}

执行结果如下图,会发现线程的名字都一样,因为在执行后续任务的时候,上一个任务已经完成,会复用上一个任务的线程资源来执行。


概率论与数理统计基础概念与重要定义汇总 文章目录一、随机事件和概率1:互斥,对立,独立事件的定义和性质。2:概率,条件概率和五大概率公式3:古典型,几何型概率和伯努利试验 一、随机事件和概率 1:互斥,对立,独立事件的定义和性质。 互斥事件\color{red}\textbf{互斥事件}互斥事件 事件A和B的交集为空,A与B就是互斥事件,也叫互不相容事件。也可叙述为:不可能同时发生的事件。如A∩B为不可能事件(A∩B=Φ),那么称事件A与事件B互斥,其含义是:事件A与事件B在任何一次试验中不会同时发生。 则P(A+B)=P(A)+P(B)(这个公 阅读详情

相关推荐

手机如何高效辅助林业调查

手机如何高效辅助林业调查 很多林业工作者将栅格类型的地形图处理后导入平板电脑,在林地使用平板电脑加载小班矢量图,辅助林业调查。但是,如果没有地形图底图,这种方法可能就有难度,而且最重要的是,大部分林地工作者没有能力配置平板电脑。大凡林业基层工作者在林地调查时,除调查记录本等部分纸质材料外,都必然携带手机和水杯,此外其他设备已经成为累赘,尤其是炎热的夏季在杂灌丛生的林地进行调查作业。因此,使用手机...

xu780820的博客 3079

缓存型线程池 newCachedThreadPool

时长,线程实例将被终止并移出池。,但对于生存期短的异步任务,它是首选。的线程,有的话就 reuse。的线程不必担心其结束,超过。缓存型池子,缓冲池容量大小为。不活动,其会自动被终止。缓存型池子通常用于执行一些。一个新的线程加入池中。,如果没有就 new。

张紫娃的博客 3664

从AP到ADSP:高通8650 AudioReach中GSL-Passthru-GPR的数据通路剖析

本文深入剖析了高通骁龙8650平台AudioReach架构中,音频数据从应用处理器(AP)到音频数字信号处理器(ADSP)的完整传输路径。重点解析了GSL(Graph Service Layer)如何封装命令,并通过Passthru驱动与GPR(Generic Packet Router)协同工作,实现跨处理器的高效、异步数据交换,揭示了现代手机复杂音频系统背后的核心通信机制。

cherry的博客 537

java 线程池之 newCachedThreadPool

线程的实现方式 java 多线程之 extends Thread java 多线程之 implements Runnable java 多线程之 implements Callable 线程池的使用 线程池简介 ThreadPoolExecutor java 线程池之 newScheduledTh......

比嗨皮兔 2万+

SMILES:化学结构的线性表示方法

SMILES:化学结构的线性表示方法

jasminefeng的博客 1万+

docker配置国内镜像源

【代码】docker配置国内镜像源。

愿听风成曲 9616

线程池之newCachedThreadPool可缓存线程池

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

sayoko06的博客 3万+

信息奥赛课课通(C++)p154-1近似排序

试题描述 读入一对正整数,将这两个数之间(包括这两个数本身)的所有数按下述特别规则排序后输出,该特别规则是按两数倒过来的值进行比较决定其大小,如30倒过来为3,29倒过来为92,则29大于30. 输入要求 1行,包含两个用空格隔开的自然数,这两个自然数给出了待排序数的范围,其中1≤第一个数≤第二个数≤999999999,两个数之差不超过100. 输出要求 输出排序后的数据,每行输出...

mengdicfm的博客 7287

线程池:newCachedThreadPool

线程池:newCachedThreadPool

大连赵哥的博客 1346

腾讯云DBA面试(一面)

在第二阶段,根据RM返回的结果,如果涉及分布式事务的所有RM都返回可以提交, 则TM给RM发送commit的命令,每个RM实现自己的提交,同时释放锁和资源,然后RM反馈提交成功, TM完成整个分布式事务;根据事务所处的阶段,可以回滚到具体的版本,实现一致性。1.并发执行的事务,在prepare阶段,redo log先写文件缓存,第一个领头的事务,在等待n个事务后, 在第一个事务去刷写磁盘时,会把同组的其他的事务,也一起刷写到磁盘上,这样就减少了刷盘的次数,降低了磁盘的IOPS。分布式锁是怎么实现的?

u012565458的博客 1978

华为od 面试八股文_Python_05_含答案

华为od 面试八股文_Python_05_含答案

MISAYAONE的博客 2568

线程池newCachedThreadPool

1.查看newCachedThreadPool线程池创建方法 创建线程池: Executor cachedThread = Executors.newFixedThreadPool(1); 查看底层实现: public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.

tzhongwen的专栏 2957

26版SPSS操作教程(高级教程第二十一章)

#专注方能成事 #本期内容:信度分析 #由于导师最近布置了学习SPSS这款软件的任务,因此想来平台和大家一起交流下学习经验,这期推送内容接上一次高级教程第二十章的学习笔记,希望能得到一些指正和帮助~

你好! 1713

java 缓存线程池_(优快云 迁移) JAVA多线程实现-可回收缓存线程池(newCachedThreadPool)

在前两篇博客中介绍了单线程化线程池(newSingleThreadExecutor)、可控最大并发数线程池(newFixedThreadPool)。下面介绍的是第三种newCachedThreadPool——可回收缓存线程池。在JAVA文档中是这样介绍可回收缓存线程池的:创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可...

weixin_29324401的博客 333

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

(优快云 迁移) JAVA多线程实现-可回收缓存线程池(newCachedThreadPool)

在前两篇博客中介绍了单线程化线程池(newSingleThreadExecutor)、可控最大并发数线程池(newFixedThreadPool)。下面介绍的是第三种newCachedThreadPool——可回收缓存线程池。 在JAVA文档中是这样介绍可回收缓存线程池的:创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务...

dixu4171的博客 242

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java 线程池 newCachedThreadPool缓存线程池、newFixedThreadPool固定线程池

多进程、多线程、多线程中的共享变量的安全问题、同步锁、线程同步、ThreadLocal Java 线程池 newCachedThreadPool缓存线程池、newFixedThreadPool固定线程池 package src.main.sample; import java.util.concurrent.ExecutorService; import java.u...

あずにゃん梓喵的博客 1452

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

缓存线程池-newCachedThreadPool (搬迁至此)

缓存线程池与固定线程池的区别在于对于需要执行很多短期异步任务的程序来说,缓存线程池可以提高程序性能,因为长时间保持空闲的这种类型的线程池不会占用任何资源,调用缓存线程池对象将重用以前构造的线程(线程可用状态),若线程没有可用的,则创建一个新线程添加到池中,缓存线程池将终止并从池中移除60秒未被使用的线程。 import java.util.concurrent.ExecutorService

华哥的专栏 2568

Java线程池示例:缓存线程池

private static void testCacheThreadPool() throws InterruptedException { ExecutorService service = Executors.newCachedThreadPool(); System.out.println(service); for (int i = 0;...

学亮编程手记 722

缓存线程池的作用

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

weixin_34088838的博客 459

Java缓存线程池(newCachedThreadPool)和固定数量线程池(newFixedThreadPool)

java5相比之前的Java版本,在并发编程上,有了非常大的提高,加了很多类,提供了很多可用于并发编程的工具包和工具类。尤其为人们所称道的,就是Java自带的线程池。      Java5线程池的介绍文章,可以说在网上比比皆是,我就不再重复了,只是简单提一下,线程池给并发程序带 来了几个好处:       1、创建和销毁线程的开销    2、保护系统资源,避免创建太多

226

java中实现多线程的方法有几种以及如何实现多线程

多线程是java语言区别于其它语言的一大特点。其它语言向C++的话如果要实现多线程的话,必须调用操作系统的多线程机制(我不确定自己记得对不对 了感兴趣的自己上网查查看)。 在java5以前实现多线程有两种方法(继承Thread类和实现Runnable接口) 它们分别为: 使用new Thread()和new Thread(Runnable)形式 第一种...

weixin_30570101的博客 122

Java多线程-四种线程池创建方式

一)线程池简介 1、减少线程的频繁创建、销毁。 2、可有效的使用和管理线程,提升资源重复使用率,避免资源不足引起的一些问题。 二)newFixedThreadPool 原理:创建一个固定数量大小的线程池,当线程任务数超过固定大小时,未执行的线程任务进行阻塞队列,等待线程池调度。 示例: import java.util.concurrent.ExecutorService; i...

p812438109的专栏 6565

Kotlin中使用newCachedThreadPool

1、new Thread的弊端 new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }).start();a. 每次new Thread新建对象性能差。每次在创建线程和关闭线程上有一定的耗时和耗能。 b. 线程缺乏统一管理,可能无限制新建线程,

meetings的专栏 2616

newFixedThreadPool、newSingleThreadPool、newCachedThreadPool线程池创建线程的方式

newFixedThreadPool、newSingleThreadPool、newCachedThreadPool线程池创建线程的方式

weixin_41520357的博客 535

【第二十三篇】四种线程池的分类和简单应用 【重点】

1.1 缓存线程池(newCachedThreadPool) 1.1.1 作用 创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们,并在需要时使用提供的 ThreadFactory 创建新线程。 1.1.2 特征 (1)线程池中数量没有固定,可达到最大值(Interger. MAX_VALUE) (2)线程池中的线程可进行缓存重复利用和回收(回收默认时间为1分钟) (3)当线程池中,没有可用线程,会重新创建一个线程 1.1.3 创建方式 Executors.newCache

ᶻᶻᶻ 枕星河的博客 1099

java创建多线程使用Executors创造ExecutorService

Executors提供了一些方便创建ThreadPoolExecutor的常用方法,主要有以下几个: 1、 Executors.newFixedThreadPool(int nThreads);创建固定大小(nThreads,大小不能超过int的最大值)的线程池 //线程数量 int nThreads = 20; //创建executor 服务 ExecutorService execu

dreajay的专栏 1244
上一篇: JAVA循环删除List的某个元素
下一篇: JAVA多线程实现-支持定时与周期性任务的线程池(newScheduledThreadPool)
山禾_Abel
博客等级 码龄15年 30粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值