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岁的学生写小说,应该去什么样的网站?