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

网站首页布局设计代码代写新闻稿

网站首页布局设计代码,代写新闻稿,深圳乐安居网站谁做的,泰国做网站赌博要判几年在高并发场景下,线程池是提升系统性能、稳定性和资源控制的关键机制。本文将深入讲解 Java 线程池的核心原理、实现方式以及实际开发中的最佳使用方法,帮助你写出更高效、更安全的并发程序。 一、什么是线程池?为什么需要它? 线程…

在高并发场景下,线程池是提升系统性能、稳定性和资源控制的关键机制。本文将深入讲解 Java 线程池的核心原理、实现方式以及实际开发中的最佳使用方法,帮助你写出更高效、更安全的并发程序。


一、什么是线程池?为什么需要它?

线程池(ThreadPool)本质上是一个线程复用机制,它通过事先创建若干个线程,避免了频繁创建与销毁线程带来的资源浪费和系统开销。

🚫 没有线程池会怎样?

 

java

复制编辑

new Thread(() -> { // 执行任务 }).start();

每次请求都新建一个线程,看似简单,实则危险:

  • 线程创建是昂贵的系统调用(涉及内核态)

  • 无控制的新建线程可能导致 OOM

  • CPU 频繁上下文切换,影响性能

✅ 使用线程池的优势

  • 复用已有线程,提升性能

  • 控制并发线程数量,避免资源耗尽

  • 支持任务排队、优先级等管理机制

  • 提供灵活的拒绝策略,增强系统韧性


二、Java 中的线程池体系结构

Java 提供了强大的线程池框架,主要由 java.util.concurrent 包中的以下核心类构成:

 

text

复制编辑

Executor → ExecutorService → ThreadPoolExecutor

其中 ThreadPoolExecutor 是线程池的核心实现类。


三、ThreadPoolExecutor 构造函数详解

 

java

复制编辑

public ThreadPoolExecutor( int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)

参数含义:

参数含义
corePoolSize核心线程数(始终保活)
maximumPoolSize最大线程数(包括救火线程)
keepAliveTime非核心线程空闲存活时间
unit存活时间单位
workQueue任务队列(常用 LinkedBlockingQueue
threadFactory自定义线程命名/优先级等
handler拒绝策略(四种预设 + 自定义)

📌 核心线程 VS 非核心线程

  • 核心线程:即使空闲,也不会被销毁

  • 非核心线程:keepAliveTime 过后被回收


四、线程池工作流程图

 

scss

复制编辑

提交任务 execute() ↓ ┌───────── 判断线程数是否小于 corePoolSize ─────────┐ │ 是 → 创建核心线程执行任务 │ │ 否 → 进入任务队列 workQueue │ │ ↓ │ │ 队列是否满? │ │ ┌─────────────┐ │ │ │ 否 → 排队等待 │ │ │ │ 是 → 是否小于最大线程数? │ │ │ ┌───────────────┐ │ │ │ │ 是 → 创建非核心线程 │ │ │ │ │ 否 → 触发拒绝策略 │ │ └───┴───────────────────────┘


五、常见线程池工厂方法(Executors)

虽然不推荐直接使用 Executors 创建线程池(因为无法配置参数),但了解它们仍有意义:

 

java

复制编辑

Executors.newFixedThreadPool(5); // 固定线程数 Executors.newCachedThreadPool(); // 可伸缩线程数 Executors.newSingleThreadExecutor(); // 单线程 Executors.newScheduledThreadPool(5); // 定时任务

⚠️ 生产中不建议使用 Executors 的原因

它们底层使用无界队列或最大线程数为 Integer.MAX_VALUE容易导致OOM或过度创建线程。推荐自己使用 ThreadPoolExecutor 进行配置。


六、实战:手写一个线程池最佳实践配置

 

java

复制编辑

ExecutorService executorService = new ThreadPoolExecutor( 4, 8, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(100), new ThreadFactory() { private final AtomicInteger count = new AtomicInteger(1); public Thread newThread(Runnable r) { return new Thread(r, "biz-thread-" + count.getAndIncrement()); } }, new ThreadPoolExecutor.CallerRunsPolicy() );

配置说明:

  • 核心线程 4,最大线程 8

  • 任务队列最大 100,防止堆积过多任务

  • 自定义线程名,便于排查问题

  • 拒绝策略使用 CallerRunsPolicy(退而求其次:主线程执行)


七、拒绝策略详解

Java 提供了 4 种内置拒绝策略(可实现自定义):

策略含义
AbortPolicy默认。抛出异常拒绝任务
CallerRunsPolicy谁提交谁执行(主线程兜底)
DiscardPolicy直接丢弃任务,不抛异常
DiscardOldestPolicy丢弃队首任务,尝试执行当前任务


八、如何合理配置线程池参数?

🧠 思路一:根据 CPU 密集 / IO 密集 类型设定

  • CPU 密集型(如加解密、算法):核心线程数 = CPU 核心数 + 1

  • IO 密集型(如读写文件、数据库):核心线程数 = CPU 核心数 × 2

 

java

复制编辑

int coreCount = Runtime.getRuntime().availableProcessors();

📈 思路二:监控+压测得出结论

  • 利用 JConsoleArthasPrometheus + Grafana 观察线程使用情况

  • 使用 JMH 进行性能测试

  • 设置队列长度防止堆积过多任务


九、线程池的关闭与优雅停机

 

java

复制编辑

executorService.shutdown(); // 停止接收新任务,等待执行完 executorService.shutdownNow(); // 尝试中断正在运行的任务

推荐使用:

 

java

复制编辑

executorService.shutdown(); if (!executorService.awaitTermination(60, TimeUnit.SECONDS)) { executorService.shutdownNow(); }


🔚 总结:写线程池的几个黄金法则

✅ 明确任务特性(CPU/IO密集)
✅ 手动配置 ThreadPoolExecutor,避免 Executors
✅ 合理设定队列长度和拒绝策略
✅ 使用命名线程工厂,便于排查问题
✅ 使用监控工具实时观测线程使用情况
✅ 线程池关闭要优雅,避免资源泄露


📚 推荐阅读

  • 《Java 并发编程实战》

  • 阿里巴巴《Java 开发手册》对线程池的规范

  • JDK 源码:ThreadPoolExecutor.java


如果你觉得本文有用,欢迎点赞、收藏、评论支持!

http://www.15wanjia.com/news/23035.html

相关文章:

  • 浙江建设网站重庆seo整站优化设置
  • 公司建网站一般多少钱如何用手机创建网站
  • 做淘宝先在批发网站上拿货广告联盟平台自动赚钱
  • 如何形容网站免费的大数据分析平台
  • 做网站什么前端框架方便什么是电商平台推广
  • 如何建立一个学校网站免费友情链接网页
  • 网站建设手机端管网长沙网络公司营销推广
  • 怎么利用网站做cpa推广google安卓版下载
  • 自己设计网页的网址关键词优化是什么工作
  • 做网站需要基础吗微商引流一般用什么软件
  • 网站优化个人工作室seo推广优化工具
  • 面包屑 网站友情链接查询
  • 建筑铝模板价格一览表seo网站关键词优化哪家好
  • 上海建设网站的公司营销活动怎么做吸引人
  • 公司做网站需要提供的材料模板建站代理
  • 南部县人民医院整体迁建项目关键词诊断优化全部关键词
  • 购买域名后怎么建网站竞价托管资讯
  • 福建漳州网站建设费用哈尔滨百度推广联系人
  • 手机网站开发注意的问题优化排名推广教程网站
  • 互助县公司网站建设百度推广一级代理商名单
  • 做网站需要什么部门批准广东深圳疫情最新消息今天
  • 空间商网站ip被攻击后换ip收录提交入口网址
  • 怎么做网站seo优化信息发布平台推广有哪些
  • 有没有专门做一件代发的网站创建网站怎么创
  • 成都住房和城乡建设局网站投放广告
  • wordpress登录wp-admin网站排名在线优化工具
  • 做代购可以在哪些网站上免费网络营销推广软件
  • 做汽车的网站百度seo网站优化服务
  • wordpress epub重庆seo顾问服务
  • 网站开发宣传图片明星百度指数排名