Java 线程池框架
发布时间 - 2026-01-10 22:56:08 点击率:次一、线程池结构图
二、示例
定义线程接口
public class MyThread extends Thread {
@Override
publicvoid run() {
System.out.println(Thread.currentThread().getName() + "正在执行");
}
}
1:newSingleThreadExecutor
ExecutorService pool = Executors. newSingleThreadExecutor(); Thread t1 = new MyThread(); Thread t2 = new MyThread(); Thread t3 = new MyThread(); //将线程放入池中进行执行 pool.execute(t1); pool.execute(t2); pool.execute(t3); //关闭线程池 pool.shutdown();
输入结果:
pool-1-thread-1正在执行 pool-1-thread-1正在执行 pool-1-thread-1正在执行
2:newFixedThreadPool
ExecutorService pool = Executors.newFixedThreadPool(3); Thread t1 = new MyThread(); Thread t2 = new MyThread(); Thread t3 = new MyThread(); Thread t4 = new MyThread(); Thread t5 = new MyThread(); //将线程放入池中进行执行 pool.execute(t1); pool.execute(t2); pool.execute(t3); pool.execute(t4); pool.execute(t5); pool.shutdown();
输入结果:
pool-1-thread-1正在执行 pool-1-thread-2正在执行 pool-1-thread-1正在执行 pool-1-thread-2正在执行
3 :newCachedThreadPool
ExecutorService pool = Executors.newCachedThreadPool(); Thread t1 = new MyThread(); Thread t2 = new MyThread(); Thread t3 = new MyThread(); Thread t4 = new MyThread(); Thread t5 = new MyThread(); //将线程放入池中进行执行 pool.execute(t1); pool.execute(t2); pool.execute(t3); pool.execute(t4); pool.execute(t5); //关闭线程池 pool.shutdown();
输入结果:
pool-1-thread-2正在执行 pool-1-thread-4正在执行 pool-1-thread-3正在执行 pool-1-thread-1正在执行 pool-1-thread-5正在执行
4 :ScheduledThreadPoolExecutor
ScheduledExecutorService pool = Executors.newScheduledThreadPool(2);
pool.scheduleAtFixedRate(new Runnable() {//每隔一段时间就触发异常
@Override
public void run() {
//throw new RuntimeException();
System.out.println("================");
}
}, 1000, 2000, TimeUnit.MILLISECONDS);
pool.scheduleAtFixedRate(new Runnable() {//每隔一段时间打印系统时间,证明两者是互不影响的
@Override
public void run() {
System.out.println("+++++++++++++++++");
}
}, 1000, 2000, TimeUnit.MILLISECONDS);
输入结果:
================ +++++++++++++++++ +++++++++++++++++ +++++++++++++++++
三、线程池核心参数
corePoolSize : 池中核心的线程数
maximumPoolSize : 池中允许的最大线程数。
keepAliveTime : 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间。
unit : keepAliveTime 参数的时间单位。
workQueue : 执行前用于保持任务的队列。此队列仅保持由 execute方法提交的 Runnable任务。
threadFactory : 执行程序创建新线程时使用的工厂。
handler : 由于超出线程范围和队列容量而使执行被阻塞时所使用的处理程序。
ThreadPoolExecutor :Executors类的底层实现。
3.1 任务排队机制
SynchonousQueue: 同步队列,队列直接提交给线程执行而不保持它们,此时线程池通常是无界的
LinkedBlockingQueue: 无界对列,当线程池线程数达到最大数量时,新任务就会在队列中等待执行,可能会造成队列无限膨胀
ArrayBlockingQueue : 有界队列,有助于防止资源耗尽,一旦达到上限,可能会造成新任务丢失
注意:
newSingleThreadExecutor、newFixedThreadPool使用的是LinkedBlockingQueue
newCachedThreadPool 使用的是 SynchonousQueue
newScheduledThreadPool使用的是 DelayedWorkQueue
3.2 线程执行流程
3.3 线程大小确定:
cpu密集型: 尽量少开线程,最佳线程数 Ncpu+1
io密集型:多开线程,2Ncpu
混合型:根据情况而定,可以拆分成io密集和cou密集
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# Java
# 线程池
# 框架
# 详谈Java几种线程池类型介绍及使用方法
# Java 线程池原理深入分析
# Java 线程池详解及创建简单实例
# 浅谈java常用的几种线程池比较
# Java 定时器(Timer)及线程池里使用定时器实例代码
# Java 线程池详解及实例代码
# 四种Java线程池用法解析
# Java编程中线程池的基本概念和使用
# java基于线程池和反射机制实现定时任务完整实例
# java的线程池框架及线程池的原理
# 的是
# 池中
# 新任务
# 每隔
# 无界
# 结构图
# 会在
# 而不
# 而定
# 此为
# 尽量少
# 混合型
# newSingleThreadExecutor
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在阿里云完成域名注册与建站?
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
浅析上传头像示例及其注意事项
Laravel观察者模式如何使用_Laravel Model Observer配置
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
Laravel PHP版本要求一览_Laravel各版本环境要求对照
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
手机网站制作与建设方案,手机网站如何建设?
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
Windows Hello人脸识别突然无法使用
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
Python企业级消息系统教程_KafkaRabbitMQ高并发应用
如何在阿里云ECS服务器部署织梦CMS网站?
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
如何在阿里云高效完成企业建站全流程?
Android自定义控件实现温度旋转按钮效果
Laravel怎么使用artisan命令缓存配置和视图
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
如何快速使用云服务器搭建个人网站?
装修招标网站设计制作流程,装修招标流程?
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
详解CentOS6.5 安装 MySQL5.1.71的方法
如何用狗爹虚拟主机快速搭建网站?
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
如何用景安虚拟主机手机版绑定域名建站?
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
🚀拖拽式CMS建站能否实现高效与个性化并存?
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
网站建设整体流程解析,建站其实很容易!
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
用yum安装MySQLdb模块的步骤方法
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
phpredis提高消息队列的实时性方法(推荐)
Laravel如何使用Livewire构建动态组件?(入门代码)
html5的keygen标签为什么废弃_替代方案说明【解答】
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?

