当前位置: 首页 > news >正文

网站临时会话公司门户网站

网站临时会话,公司门户网站,微信h5免费制作网站,镇江建工建设集团网站一、线程池概念 线程池(Thread Pool) 是一种 线程复用机制,用于管理和复用线程,避免频繁创建和销毁线程带来的性能开销,提高并发性能。 核心目的: 线程复用:减少线程创建和销毁开销。 控制线程…

一、线程池概念

线程池(Thread Pool) 是一种 线程复用机制,用于管理和复用线程,避免频繁创建和销毁线程带来的性能开销,提高并发性能。

核心目的:

  1. 线程复用:减少线程创建和销毁开销。

  2. 控制线程数量:防止系统因线程过多而崩溃。

  3. 任务排队:线程空闲时可执行等待队列中的任务。

  4. 统一管理:方便线程管理、监控与调优。

线程池基本组成:

  • 核心线程数(corePoolSize):线程池保持的最小线程数。

  • 最大线程数(maximumPoolSize):线程池允许的最大线程数。

  • 任务队列(workQueue):存放等待执行的任务。

  • 线程工厂(ThreadFactory):用于创建新线程。

  • 拒绝策略(RejectedExecutionHandler):当线程池和队列都满时如何处理任务。

  • 线程存活时间(keepAliveTime):非核心线程空闲存活时间。


二、Java 线程池体系结构

Java 的线程池体系主要由 接口 + 核心实现 + 工厂类 组成。

1. Executor 体系

类型作用
Executor(接口)线程执行规范,只定义 execute(Runnable) 方法
ExecutorService(接口,继承 Executor)扩展接口,支持任务管理和返回结果(submit、shutdown 等)
AbstractExecutorService(抽象类)提供 ExecutorService 的部分实现,简化子类实现
ThreadPoolExecutor(核心类)推荐使用ExecutorService 的主要实现类,可高度自定义线程池参数
Executors(工具类)不推荐使用提供常用线程池工厂方法,封装 ThreadPoolExecutor 快速创建线程池

2. Executors 的问题(不推荐使用)

 不推荐使用Executors创建线程池,推荐使用ThreadPoolExecutor创建线程池

Executors 提供的工厂方法虽然方便,但大多数存在 隐藏风险

工厂方法隐患
newFixedThreadPool / newSingleThreadExecutor使用 无界队列 (LinkedBlockingQueue) → 队列无限积压,容易 OOM
newCachedThreadPool线程数几乎无限 → 可能创建大量线程导致 系统崩溃
newScheduledThreadPool定时线程池虽然安全,但默认队列同样可能无限积压任务

使用样例

//1. 固定线程池
ExecutorService fixedPool = Executors.newFixedThreadPool(5);
//2. 缓存线程池
ExecutorService cachedPool = Executors.newCachedThreadPool();
//3. 单线程线程池
ExecutorService singlePool = Executors.newSingleThreadExecutor();
//4. 定时线程池
ScheduledExecutorService scheduledPool = Executors.newScheduledThreadPool(2);

总结:方便但不安全,生产环境不推荐直接使用。

2. 推荐使用ThreadPoolExecutor

 不推荐使用Executors创建线程池,推荐使用ThreadPoolExecutor创建线程池

这里详情可以去看:并发编程--线程池(2)ThreadPoolExecutor以及他的7个参数-CSDN博客

ThreadPoolExecutor 的优势

  • 可自定义核心线程数和最大线程数 → 精准控制资源。

  • 可选择有界队列 → 避免任务无限积压。

  • 可设置拒绝策略 → 系统负载过高时安全处理任务。

  • 可自定义线程工厂 → 便于线程命名、监控和调试。

  • 性能可调优 → 根据系统实际情况调整参数。

使用样例

ThreadPoolExecutor pool = new ThreadPoolExecutor(10,                          // corePoolSize 核心线程数50,                          // maximumPoolSize 最大线程数60, TimeUnit.SECONDS,        // keepAliveTime 空闲线程存活时间new ArrayBlockingQueue<>(100), // 有界队列Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy() // 拒绝策略
);

3. Executors 与 ThreadPoolExecutor 区别

特点Executors 工厂方法ThreadPoolExecutor
配置灵活性低,封装好的线程池高,可自定义线程数、队列、拒绝策略等
队列newFixedThreadPool / newSingleThreadExecutor → 无界队列(可能 OOM)可指定有界队列或无界队列
最大线程数默认固定可自定义
是否推荐不推荐生产使用推荐,适合生产环境

4. 三者关系图

Executor  (接口)   ↑
ExecutorService (接口)↑
AbstractExecutorService (抽象类)↑
ThreadPoolExecutor (核心实现类)↑
Executors (工具类封装)

三、Executors 常用工厂方法

方法类型特点
newFixedThreadPool(int n)固定线程池核心线程数 = 最大线程数 = n,使用 无界队列
newCachedThreadPool()缓存线程池核心线程数 = 0,最大线程数几乎无限,线程空闲会回收
newSingleThreadExecutor()单线程线程池只有一个线程顺序执行任务,使用 无界队列
newScheduledThreadPool(int n)定时线程池支持延迟和周期任务

⚠️ 注意:

  • Executors 工厂方法方便,但多数使用 无界队列无限线程,可能导致 OOM 或线程过多。

  • 推荐直接使用 ThreadPoolExecutor 并指定合理参数,适合生产环境。


四、ThreadPoolExecutor 构造方法解析

public ThreadPoolExecutor(int corePoolSize,                      // 核心线程数int maximumPoolSize,                   // 最大线程数long keepAliveTime,                    // 非核心线程空闲存活时间TimeUnit unit,                         // 时间单位BlockingQueue<Runnable> workQueue,     // 任务队列ThreadFactory threadFactory,           // 线程工厂RejectedExecutionHandler handler       // 拒绝策略
)
  • 核心线程:始终保留,即使空闲也不销毁(除非 allowCoreThreadTimeOut=true)。

  • 非核心线程:空闲超过 keepAliveTime 会被回收。

  • 任务队列

    • 有界队列(ArrayBlockingQueue):可限制排队任务数,避免 OOM。

    • 无界队列(LinkedBlockingQueue):任务无限积压,可能导致 OOM。

  • 拒绝策略

    • AbortPolicy(默认):抛出异常。

    • CallerRunsPolicy:调用者线程执行任务。

    • DiscardPolicy:直接丢弃任务。

    • DiscardOldestPolicy:丢弃队列中最旧任务,执行新任务。


五、线程池总结

  1. 概念:线程池是复用线程、控制线程数量、管理任务队列的机制。

  2. Java 体系

    • Executor:顶层接口,定义任务执行规范。

    • ExecutorService:扩展接口,支持任务管理和结果返回。

    • ThreadPoolExecutor:核心实现类,可高度自定义线程池参数。

    • Executors:工厂类,快速创建常用线程池(封装 ThreadPoolExecutor)。

  3. 使用建议

    • 生产环境尽量直接使用 ThreadPoolExecutor,指定合理参数(线程数、队列、拒绝策略)。

    • 避免直接使用 Executors 的无界队列线程池。

http://www.dtcms.com/a/560253.html

相关文章:

  • 建设单位网站cms是什么公司简称
  • 做网站东莞长沙网站建设策划
  • 足球外围网站怎么做做进口产品的网站好
  • 那些网站可以接私活做无锡网站制作公司
  • 哪有网站建设的wordpress手机端模板
  • 丰台建站公司做销售网站的好做么
  • 秒收的网站用vs做网站如何连接数据库
  • 全国网站建设人员数量wordpress review主题
  • 厦门微网站开发wordpress 同步 微信
  • 网站备案需要具备什么条件现在做网站还有用吗
  • 国外互联网裁员长春seo排名
  • 设计网站需要的知识安卓app做网站外壳
  • 坑梓网站建设如何深圳营销型网站建设制作商
  • 优酷视频网站源码口碑seo推广公司
  • 外贸网站建设行业发展企业微信app官网下载
  • 滑动网站wordpress aliyun
  • 淘宝怎么发布网站建设网页制作的公司排名
  • 西安网站建设兼职阳春做网站公司
  • 查网站服务器速度南昌网站排名
  • 提供微网站建设中国建设银行官网站住房公积金
  • 网站备案查询背景布asia域名
  • 烟台网站制作专业电商平台推广方式有哪些
  • 做产地证的网站服装设计公司取名
  • 福州网站定制设计psdw做网站
  • 网站建设宣传册内容龙岩网站建设全包
  • 宜春seo网站推广后台网站手机版视频怎么做
  • 怎么做网站推广世界杯织梦建设网站全过程
  • 郑州网站建设的公司计算机网页制作工具
  • 湖州专业做网站wordpress更新慢
  • 哪里能找到网站泰安市景区建设网站