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

网站页面设计报价模板广州seo网络培训课程

网站页面设计报价模板,广州seo网络培训课程,自动化优化系统网站建设,临沂哪里有做网站的在高并发场景下,线程池是提升系统性能、稳定性和资源控制的关键机制。本文将深入讲解 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.cadmedia.cn/news/5835.html

相关文章:

  • 网站建设与推广实训心得厦门seo俱乐部
  • 卓光网站建设百度小说排行榜总榜
  • 奇艺广州网站建设 熊掌号网页推广怎么做
  • 天津平台网站建设报价搜索排名优化
  • 网站建设 鄂icp备最好的小说网站排名
  • 做搜狐网站页面马鞍山网站seo
  • 天津网站专业制作seo网络推广报价
  • 营销网站的问题与优势百度公司地址在哪里
  • dw制作网页完整步骤ind保定seo推广外包
  • 科技期刊网站建设seo关键词优化系统
  • 南充公司网站建设关键词优化软件有哪些
  • 专业的广州商城网站建设星巴克营销策划方案
  • 恩施北京网站建设网站关键词优化怎么做的
  • html编辑器安卓版下载襄阳seo培训
  • 品牌网站大全西安seo服务培训
  • 网站制作泉州公司上海优化公司选哪个
  • 重庆云阳网站建设价格免费建网站
  • 怎么做一个公司的网站宣传平台有哪些
  • 发改委门户网站建设思路谷歌查询关键词的工具叫什么
  • 网页制作与设计项目策划书百度搜索seo
  • 寻找销售团队外包站长工具seo查询5g5g
  • 城乡与建设厅网站上海网络推广培训学校
  • 泉州网站设计网络营销活动策划方案
  • 提供秦皇岛网站建设网页模板怎么用
  • 贵州公明建设投资咨询有限公司官方网站汕头seo优化项目
  • 网站建设合同按什么交印花税指数型基金是什么意思
  • 国家建设部投诉网站营销公司
  • 办网站租服务器百度系优化
  • 广东省两学一做网站友情链接平台网站
  • 中国近期的军事大新闻湖南正规seo公司