Java多线程:Executors

Java多线程(四):使用Executors创建线程池及其注意事项 文章目录1. 简介2. newCachedThreadPool3. newFiexedThreadPool4. newSingleThreadExecutor5. newScheduledThreadPool6. 注意事项(必看) 1. 简介 Executors 也是创建线程池的工具,通过Executors 可以简单地创建线程池对象。主要包括以下4种创建方式: newCachedThreadPool:创建一个可缓存的线程池。每个创建的线程默认偶60秒空闲时间,前面创建的线程只要还没被回收,并且处于空闲状 阅读详情

Executors类位于java.util.concurrent包下,提供了一些方便构建ThreadPoolExecutor和线程管理的方法。

主要方法有以下几个:

1.创建一个固定大小的线程池

  public static ExecutorService newFixedThreadPool(int nThreads) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>());
    }
参数nThreads为线程池的大小,线程keepAliveTime为0,ThreadPoolExecutor中启动的corePoolSize线程启动后会一直运行,并不会超时退出,线程池的缓冲队列为LinkedBlockingQueue,大小为Integer.MAX_VALUE,当使用此线程池时,在同时执行的任务数量超过corePoolSize时,将会放入LinkedBlockingQueue,在LinkedBlockingQueue中的任务需要等待其他线程空闲后来执行。


2.创建一个corePoolSize为0,最大线程数为整形最大值得线程池,

    public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>());
    }

线程keepAliveTime为60,单位为秒,缓存队列为SynchronousQueue的线程池。在使用时,放入线程池的任务都会复用或启动新的线程来执行,直到线程数达到整形最大数后抛出异常RejectedExecutionException。与直接实例化Thread来处理的好处就是在60秒内可重用池内已创建的线程。 


3.创建一个大小为1的固定线程池

    public static ExecutorService newSingleThreadExecutor() {
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>()));
    }
当使用此线程池时,同时执行的任务只有1个,其他任务在LinkedBlockingQueue中,等待轮询执行。


4.创建一个corePoolSize为传入参数,最大线程数为整形的最大数的线程池,此线程池支持定时以及周期性执行任务

    public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
        return new ScheduledThreadPoolExecutor(corePoolSize);
    }
ScheduledThreadPoolExecutor类的构造:

    public ScheduledThreadPoolExecutor(int corePoolSize) {
        super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS,
              new DelayedWorkQueue());
    }
此线程池keepAliveTime参数为0,缓存对列为DelayedWorkQueue。

jdk1.5之前的版本中更多的是借助Timer类来实现,Timer和ScheduledThreadPoolExecutor的区别:

a.Timer单线程运行,一旦任务执行缓慢,下一个任务就会推迟,而如果使用了ScheduledThreadPoolExecutor线程数可以自行控制

b.当Timer中的一个任务抛出异常时,会导致其他所有任务不在执行

c.ScheduledThreadPoolExecutor可执行异步的任务,从而得到执行结果


ScheduledExecutorService接口继承了ExecutorService,在ExecutorService的基础上新增了以下几个方法:



public ScheduledFuture<?> schedule(Runnable command,
				       long delay, TimeUnit unit);
command:执行的任务 Callable或Runnable接口实现类

delay:延时执行任务的时间

unit:延迟时间单位

示例:

		ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
		ScheduledFuture<String> scheduledFuture = executorService.schedule(new Callable<String>() {
			public String call() throws Exception {
				return "call";
			}
		}, 10, TimeUnit.SECONDS);
		System.out.println(scheduledFuture.get());
		executorService.shutdown();

延迟10秒后,返回call字符串并输出。


 public ScheduledFuture<?> scheduleAtFixedRate(Runnable command,
						  long initialDelay,
						  long period,
						  TimeUnit unit);

command:执行的任务 Callable或Runnable接口实现类

initialDelay:第一次执行任务延迟时间

period:连续执行任务之间的周期,从上一个任务开始执行时计算延迟多少开始执行下一个任务,但是还会等上一个任务结束之后。
unit:initialDelay和period时间单位

示例: 注意看输出结果

final SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
		ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
		executorService.scheduleAtFixedRate(new Runnable() {
			public void run() {
				System.out.println("时间:" + sf.format(new Date()) );
				try {
					TimeUnit.SECONDS.sleep(5);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		},  2, 3, TimeUnit.SECONDS);

输出结果: 

时间:2014-04-01 23:44:48
时间:2014-04-01 23:44:53
时间:2014-04-01 23:44:58
时间:2014-04-01 23:45:03


public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
						     long initialDelay,
						     long delay,
						     TimeUnit unit);

command:执行的任务 Callable或Runnable接口实现类

initialDelay:第一次执行任务延迟时间
period:连续执行任务之间的周期,从上一个任务全部执行完成时计算延迟多少开始执行下一个任务
unit:initialDelay和period时间单位

final SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
		ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
		executor.scheduleWithFixedDelay(new Runnable() {
			public void run() {
				System.out.println("时间:" + sf.format(new Date()) );
				try {
					TimeUnit.SECONDS.sleep(5);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		},  2, 3, TimeUnit.SECONDS);
输出结果: 
时间:2014-04-01 23:47:38
时间:2014-04-01 23:47:46
时间:2014-04-01 23:47:54
Selenium ChromeDriver反爬与性能优化实战指南 ChromeDriver作为Selenium的核心驱动,本质是浏览器自动化执行引擎,其默认行为会暴露大量JS运行时指纹(如navigator.webdriver、window.chrome),极易被前端反爬系统识别;同时因进程管理粗放、渲染等待机制僵化,导致内存泄漏、僵尸进程和高并发下稳定性崩塌。本文围绕真实生产场景,系统解析浏览器指纹伪造原理、进程级资源管控策略、基于页面状态的智能等待范式,并提供Docker容器化、K8s弹性扩缩与Prometheus可观测性落地路径,助力开发者将ChromeDriver 阅读详情

相关推荐

告别手动输入!用Access批量导入307种土壤数据到SWAT模型(附完整MDB操作流程)

本文详细介绍了如何利用Microsoft Access批量导入307种土壤数据到SWAT模型,显著提升数据录入效率。通过解析usersoil表结构、提供Access操作指南和VBA自动化脚本,帮助环境工程师避免手动输入错误,实现高效数据管理。文章还包含性能优化技巧和常见错误解决方案,是SWAT模型用户的实用指南。

weixin_28366053的博客 325

Java多线程系列——Executor

Java多线程

飞影铠甲的博客 2627

Qoder CN 完全指南:阿里云AI智能体的全景拆解

阿里云旗下AI编程助手"通义灵码"于2026年5月20日升级为QoderCN,转型为覆盖软件开发与办公场景的AI智能体产品矩阵。该平台具备四大核心能力:代码补全、智能问答、文件编辑和智能体模式,支持GLM、DeepSeek等多模型切换。特色功能包括Quest2.0任务委派、专家团协作和记忆感知,满足金融、政务等行业的合规需求。产品形态涵盖IDE插件、CLI工具、办公助手和数字员工,形成"全家桶"式解决方案。相比Cursor等海外产品,QoderCN更注重全链路覆盖,个

几十年资深高级架构师,技术专家的技术笔记。专注C、Java、Python、微服务、云原生、AI工程化及高并发系统分布式架构实战,分享源码剖析、性能调优与架构治理经验。 938

Java并发多线程编程——Executors类

一、Executors的理解 Executors类属于java.util.concurrent包; 线程池的创建分为两种方式:ThreadPoolExecutor 和 Executors; Executors(静态Executor工厂)用于创建线程池; 工厂和工具方法Executor , ExecutorService , ScheduledExecutorService , ThreadFactory和Callable在此包中定义的类; jdk1.8API中的解释如下: 二、Executors常用的

小志的博客 1998

LLM - windows下的Dify离线部署:从镜像打包到无网环境部署(亲测,包含插件部署)

LLM - windows下的Dify离线部署:从镜像打包到无网环境部署(亲测,包含插件部署)

ocean00008899的博客 1286

国宇测试盒GH7009 SPI读操作全解析:从接线到代码实现的避坑指南

本文详细解析了国宇GH7009测试盒进行SPI读操作的完整流程与避坑要点。重点阐述了硬件连接中IO2时序控制引脚的关键作用,提供了从接线方案、电源处理到上位机代码实现的实战指南,并针对常见的数据不稳定、特定寄存器读取失败等问题给出了具体解决方案。

dapp9builder的博客 223

Java多线程之深入学习线程池(Executor)

本文是Java多线程的学习,认识了线程池的概念和作用,以及线程池的原理,如何自己实现线程池。了解了四种功能线程的用法。

qq15035899256的博客 1425

C#上位机+YOLO工业视觉全实战:从ONNX部署到产线缺陷检测落地(2026年工业级实战指南)

在2026年,工业视觉落地的核心挑战不是“能不能做”,而是“能不能在产线实时跑起来C#为何成为最优解?

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 732

java线程池之newScheduledThreadPool

1、特点: 延时启动 、定时启动 、可以自定义最大线程池数量 2、创建实例: ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3); 这里如果没有特殊需求要指定最大线程池数量的话,建议最大线程池数量=运行程序机器的cpu核心数,即 int cpuNubmer = Run...

qq_40308101的博客 7310

用 ABAP OAuth 2.0 Client 直连 SAP SuccessFactors:从体系到落地的一条龙实践指南

ABAP SMI允许在后端对外部服务的OData端点进行定义与自定义化配置,并以受信连接的方式暴露给ABAP应用调用。它并不替代OAuth,而是扮演端点与自定义参数的集中化定义者,最终认证依旧由完成。对于需要在ABAP后端发起临时或补充型OData调用的场景,SMI是一个轻量而清晰的集成入口。scope的客户端应用已经完成注册,API DomainCompany ID、证书或密钥都已归档。ABAP的Profile与Client已建立并绑定,OA2C_GRANT可见绿色访问状态。SMI。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 286

8、鼠疫流行过程的计算机建模介绍

本博文介绍了一种基于概率细胞自动机和蒙特卡罗方法的计算机模型,用于模拟由大沙鼠传播的鼠疫流行过程。结合GIS和遥感技术,该模型能够分析鼠疫在不同聚居地类型和季节变化下的传播特征,揭示了群落密度、分布及流行接触率对鼠疫传播的影响。研究还验证了模型与自然流行过程的一致性,并探讨了鼠疫在宿主数量低谷时的持续机制。模型为鼠疫防控和流行病研究提供了定量分析工具。

x2y3z4a5b的博客 107

java多线程之Executors

1 Executors的几种常见线程池分类以及创建方式 /** * 单线程线程池,可以用来处理日志文件。 保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行, 所以这个比较适合那些需要按序执行任务的场景 * * @return */ public static ExecutorService singleThreadPool() { return Executors.newSingleThreadExecutor();

Smile_ant的博客 842

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Java多线程进阶(38)—— J.U.C之executors框架:executors框架概述

框架是整个J.U.C包中类/接口关系最复杂的框架,真正理解executors框架的前提是理清楚各个模块之间的关系,高屋建瓴,从整体到局部才能透彻理解其中各个模块的功能和背后的设计思路。网上有太多文章讲executors框架,要么泛泛而谈,要么一叶障目不见泰山,缺乏整体视角,很多根本没有理解整个框架的设计思想和模块关系。本文将对整个executors框架做综述,介绍各个模块的功能和联系,后续再深入探讨每个模块,包括模块中的各个工具类。

smart_an的专栏 1319

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

java多线程系列:Executors框架

目录 Executor接口介绍 ExecutorService常用接口介绍 创建线程池的一些方法介绍 3.1 newFixedThreadPool方法 3.2 newCachedThreadPool方法 3.3 newScheduledThreadPool方法 疑问解答 4.1. Runable接口和Callable接口 Executor接口介绍 Executor是一个接口...

博客 2706

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java多线程:类Executors主要的工厂方法

Executors类,提供了一系列工厂方法用于创先线程池,返回的线程池都实现了ExecutorService接口。 1. newFixedThreadPool public static ExecutorService newFixedThreadPool(int nThreads); public static ExecutorService newFixedThreadPool(int

清风小阁 6649

Java 多线程:Executor、ExecutorService、Executors、Callable、Future与FutureTask

java 多线程

tumu6889的博客 839

Java多线程(六):线程池详解_executors

线程池(ThreadPool)是⼀种基于池化思想管理和使用线程的机制。它是将多个线程预先存储在⼀个“池子”内,当有任务出现时可以避免重新创建和销毁线程所带来性能开销,只需要从“池子”内取出相应的线程执行对应的任务即可。

2501_90405047的博客 699

Java——多线程(7/9):使用Executors得到线程池(Executors、代码演示、Executors使用可能存在的陷阱)

线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。 说明:Executors返回的线程池对象的弊端如下: 1)FixedThreadPool和SingleThreadPool: 允许的请求队列长度为Integer.MAX_VALUE,可能会堆积大量的请求,从而导致OOM。 2) CachedThreadPool: 允许的创建线程数量为Integer.MAX_VALUE,可能会创建大量的

li13437542099的博客 541

Java多线程精髓:同步、通信与Executors框架实用指南

Java的Executor框架是管理线程池的一种高级工具,它简化了线程的创建和管理工作。使用Executors工厂方法可以轻松创建不同类型的线程池。try {} };i < 5;i < 5;i < 5;i < 5;i < 5;i ++) {

逆流的小鱼 2173

多线程Java:使用Executors创建和管理线程

1. 类 Executors  此类中提供的一些方法有:  1.1 public static ExecutorService newCachedThreadPool()  创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。  1.2 public static ExecutorServic

qq_39478853的博客 340

Java多线程三:线程池和Executors类解析

线程池多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。 如果:T1 + T3 远大于 T2,则可以采用线程池,以提高服务器性能。一个线程池包括以下四个基本组成部分: 1. 线程池管理器(ThreadPool):用于创建并管

小鱼儿的专栏 872

java多线程框架_Java多线程进阶(三九)—— J.U.C之executors框架:executors框架概述...

一、executors框架简介juc-executors框架是整个J.U.C包中类/接口关系最复杂的框架,真正理解executors框架的前提是理清楚各个模块之间的关系,高屋建瓴,从整体到局部才能透彻理解其中各个模块的功能和背后的设计思路。网上有太多文章讲executors框架,要么泛泛而谈,要么一叶障目不见泰山,缺乏整体视角,很多根本没有理解整个框架的设计思想和模块关系。本文将对整个execut...

weixin_29128423的博客 284

多线程知识总结 java并发编程:Executor、Executors、ExecutorService

【代码】多线程知识总结 java并发编程:Executor、Executors、ExecutorService。

abcdefghwelcome的博客 283

java多线程:阿里巴巴java开发手册为什么要禁用 Executors 创建线程池

文章目录背景FixedThreadPoolSingleThreadPoolCachedThreadPoolScheduledThreadPool总结 背景 在上篇文章中java多线程:线程池的深度理解中,我们利用继承ThreadPoolExecutor类完成了线程池的创建。在JDK1.5以后增加了Executors类,该类提供了几种创建线程池的静态方法,比如: 但我们翻阅阿里java开发手册:文中醒目的用红字标明禁示用Executors创建以下四种类型的线程池。本文将通过对这些类型的线程池进行源码跟踪,逐

我的博客 802
上一篇: Java多线程:ThreadPoolExecutor详解
下一篇: Java多线程:Semaphore
胸口碎大石_
博客等级 码龄17年 1154粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值