0

0

Java如何提升并发吞吐量 Java多线程性能调优技巧【干货】

月夜之吻

月夜之吻

发布时间:2026-01-22 01:21:15

|

127人浏览过

|

来源于php中文网

原创

线程池大小需按任务类型设定:cpu密集型≈核心数+1~2,io密集型建议核心数×2~8并优先异步io,混合型应隔离线程池;禁用newfixedthreadpool和newcachedthreadpool,须用有界队列的自定义threadpoolexecutor。

java如何提升并发吞吐量 java多线程性能调优技巧【干货】

线程池大小设多少才不拖慢吞吐量

盲目加大 ThreadPoolExecutor 的核心线程数,反而会因上下文切换开销和锁竞争导致吞吐下降。关键不是“越多越好”,而是匹配任务类型:

  • CPU 密集型任务:线程数 ≈ CPU 核心数(Runtime.getRuntime().availableProcessors()),再加 1~2 个冗余线程防阻塞
  • IO 密集型任务:需实测,常见范围是核心数 × 2~8;但更稳妥的做法是用异步 IO(如 CompletableFuture + ExecutorService 配合非阻塞网络库)替代纯线程扩容
  • 混合型任务:拆分任务类型,用不同线程池隔离,避免慢 IO 任务饿死快计算任务

注意:newFixedThreadPoolnewCachedThreadPool 在高负载下极易失控——前者队列无界可能 OOM,后者线程无上限易触发频繁 GC。生产环境必须用带界队列、可监控的自定义 ThreadPoolExecutor

BlockingQueue 选错直接卡死吞吐

LinkedBlockingQueue 默认容量是 Integer.MAX_VALUE,看似“无限”,实则会让拒绝策略失效,任务堆积后内存暴涨、GC 停顿加剧;而 ArrayBlockingQueue 容量固定,配合 AbortPolicy 或自定义拒绝策略(如记录日志 + 降级返回)才能暴露瓶颈。

  • 高吞吐写场景:优先选 ArrayBlockingQueue,显式控制积压上限
  • 需要动态扩容且能接受轻微延迟:用 SynchronousQueue(实际是“手递手”传递),配合 newCachedThreadPool 的扩容逻辑,但仅适用于短时突发、平均负载低的场景
  • 绝对不要用 PriorityBlockingQueue 做任务队列——排序开销大,且破坏 FIFO 公平性,吞吐常下降 30%+

volatile 和 synchronized 不解决所有并发问题

很多人以为加了 volatile 就线程安全,或用 synchronized 包住整个方法就万事大吉。但吞吐瓶颈往往藏在这些细节里:

星月写作
星月写作

专为网络小说、 剧本创作者打造的AI增效工具

下载

立即学习Java免费学习笔记(深入)”;

  • volatile 只保证可见性和禁止重排序,不保证原子性——counter++ 这种操作即使字段是 volatile,依然会丢数据
  • synchronized 方法锁的是当前实例(this),若多个线程操作不同对象,根本没竞争;若锁太粗(比如整个 service 方法),会串行化本可并行的逻辑
  • 高频读写计数类场景,优先用 LongAdder 而非 AtomicLong,前者通过分段累加减少争用,在多核下吞吐可提升 5–10 倍

ThreadLocal 用不好反而吃掉堆内存

ThreadLocal 是提升单线程内复用效率的好工具,但在线程池场景下极易引发内存泄漏——线程复用导致 ThreadLocal 的 value 无法被回收,尤其 value 是大对象或持有外部引用时。

  • 务必在业务逻辑结束前调用 threadLocal.remove(),不能只依赖 set(null)
  • 避免在 Runnable 中直接捕获外部 ThreadLocal 变量,推荐封装成 Supplier 并在执行前后显式清理
  • 使用 TransmittableThreadLocal(阿里 TTL 库)解决线程池中父子线程传递问题,但要注意它本身也有性能开销,仅在必要时启用

真正影响吞吐的,常常不是算法复杂度,而是这些看似“细小”的资源生命周期管理。线程、队列、锁、本地变量——每个环节的松动,都会在高并发下被指数级放大。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

254

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1089

2024.03.01

c++中volatile关键字的作用
c++中volatile关键字的作用

本专题整合了c++中volatile关键字的相关内容,阅读专题下面的文章了解更多详细内容。

75

2025.10.23

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

443

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

605

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

764

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

376

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

31

2026.01.21

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.3万人学习

C# 教程
C# 教程

共94课时 | 11.1万人学习

Java 教程
Java 教程

共578课时 | 80.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号