详谈Java几种线程池类型介绍及使用方法
发布时间 - 2026-01-11 00:05:15 点击率:次一、线程池使用场景

•单个任务处理时间短
•将需处理的任务数量大
二、使用Java线程池好处
1、使用new Thread()创建线程的弊端:
•每次通过new Thread()创建对象性能不佳。
•线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或oom。
•缺乏更多功能,如定时执行、定期执行、线程中断。
2、使用Java线程池的好处:
•重用存在的线程,减少对象创建、消亡的开销,提升性能。
•可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。
•提供定时执行、定期执行、单线程、并发数控制等功能。
Java四种线程池
Java里面线程池的顶级接口是Executor,但是严格意义上讲Executor并不是一个线程池,而只是一个执行线程的工具。真正的线程池接口是ExecutorService。下面这张图完整描述了线程池的类体系结构:
1. newCachedThreadPool
创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。调用 execute 将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。因此,长时间保持空闲的线程池不会使用任何资源。
public static ExecutorService newCachedThreadPool()
示例代码:
public class ThreadPoolExecutorTest {
public static void main(String[] args ) {
ExecutorService cacheThreadPool =Executors.newCachedThreadPool();
for(int i =1;i<=5;i++){
final int index=i ;
try{
Thread.sleep(1000);
}catch(InterruptedException e ) {
e.printStackTrace();
}
cacheThreadPool.execute(new Runnable(){
@Override
public void run() {
System.out.println("第" +index +"个线程" +Thread.currentThread().getName());
}
});
}
}
}
//输出结果
第1个线程pool-1-thread-1
第2个线程pool-1-thread-1
第3个线程pool-1-thread-1
第4个线程pool-1-thread-1 第5个线程pool-1-thread-1
由结果可看出 当执行第二个任务时第一个任务已经完成,会复用执行第一个任务的线程,而不用每次新建线程。
2. newFixedThreadPool
创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。
public static ExecutorService newFixedThreadPool(int nThreads)
nThreads - 池中的线程数
示例代码:
public class ThreadPoolExecutorTest {
public static void main(String[] args) {
ExecutorService fixedThreadPool =Executors. newFixedThreadPool(3);
for (int i =1; i<=5;i++){
final int index=i ;
fixedThreadPool.execute(new Runnable(){
@Override
public void run() {
try {
System.out.println("第" +index + "个线程" +Thread.currentThread().getName());
Thread.sleep(1000);
} catch(InterruptedException e ) {
e .printStackTrace();
}
}
});
}
}
}
由于设置最大线程数为3,所以在输出三个数后等待2秒后才继续输出。
2. newScheduledThreadPool
创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)
corePoolSize - 池中所保存的线程数,即使线程是空闲的也包括在内。
延迟执行示例代码:
public class ThreadPoolExecutorTest {
public static void main(String[] args) {
ScheduledExecutorService scheduledThreadPool= Executors.newScheduledThreadPool(3);
scheduledThreadPool.schedule(newRunnable(){
@Override
public void run() {
System.out.println("延迟三秒");
}
}, 3, TimeUnit.SECONDS);
}
}
表示延迟3秒执行。
定期执行示例代码:
public class ThreadPoolExecutorTest {
public static void main(String[] args) {
ScheduledExecutorService scheduledThreadPool= Executors.newScheduledThreadPool(3);
scheduledThreadPool.scheduleAtFixedRate(newRunnable(){
@Override
public void run() {
System.out.println("延迟1秒后每三秒执行一次");
}
},1,3,TimeUnit.SECONDS);
}
}
表示延迟1秒后每3秒执行一次。
4.newSingleThreadExecutor
创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。(注意,如果因为在关闭前的执行期间出现失败而终止了此单个线程,那么如果需要,一个新线程将代替它执行后续的任务)。可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的。与其他等效的 newFixedThreadPool(1)不同,可保证无需重新配置此方法所返回的执行程序即可使用其他的线程。
public static ExecutorService newSingleThreadExecutor()
示例代码:
public class ThreadPoolExecutorTest {
public static void main(String[] args) {
ExecutorService singleThreadPool= Executors.newSingleThreadExecutor();
for(int i=1;i<=5;i++){
int index=i;
singleThreadPool.execute(new Runnable(){
@Override
public void run() {
try{
System.out.println("第"+index+"个线程");
Thread.sleep(2000);
}catch(InterruptedException e) {
e.printStackTrace();
}
} });
}
}
}
以上这篇详谈Java几种线程池类型介绍及使用方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# java
# 线程池类型
# java线程池合理设置最大线程数和核心线程数方式
# Java实现终止线程池中正在运行的定时任务
# Java 线程池详解及实例代码
# 教你如何监控 Java 线程池运行状态的操作(必看)
# java中通用的线程池实例代码
# Java中四种线程池的使用示例详解
# 四种Java线程池用法解析
# Java使用线程池执行定时任务
# java简单实现多线程及线程池实例详解
# java线程池使用场景及一些建议
# 创建一个
# 是一个
# 第一个
# 池中
# 给大家
# 会有
# 多个
# 已有
# 其他的
# 长时间
# 系统资源
# 希望能
# 第二个
# 相互之间
# 几种
# 这篇
# 等功能
# 四种
# 量大
# 排在
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用Livewire构建动态组件?(入门代码)
创业网站制作流程,创业网站可靠吗?
iOS中将个别页面强制横屏其他页面竖屏
如何在云主机上快速搭建多站点网站?
如何在VPS电脑上快速搭建网站?
网站制作壁纸教程视频,电脑壁纸网站?
如何在万网自助建站中设置域名及备案?
Python制作简易注册登录系统
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
利用python获取某年中每个月的第一天和最后一天
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
如何在Windows虚拟主机上快速搭建网站?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
jQuery validate插件功能与用法详解
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
微信小程序制作网站有哪些,微信小程序需要做网站吗?
详解Android中Activity的四大启动模式实验简述
昵图网官方站入口 昵图网素材图库官网入口
如何在万网主机上快速搭建网站?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
制作电商网页,电商供应链怎么做?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
Laravel如何记录自定义日志?(Log频道配置)
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
高端建站三要素:定制模板、企业官网与响应式设计优化
百度浏览器如何管理插件 百度浏览器插件管理方法
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
Laravel如何实现本地化和多语言支持?(i18n教程)
做企业网站制作流程,企业网站制作基本流程有哪些?
Internet Explorer官网直接进入 IE浏览器在线体验版网址
Laravel怎么连接多个数据库_Laravel多数据库连接配置
北京网站制作公司哪家好一点,北京租房网站有哪些?
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
深圳网站制作的公司有哪些,dido官方网站?

