Java 多线程调优是一个“系统性工程”,不是只调几个参数,而是从设计 → 编码 → JVM → 操作系统全链路优化。下面按实战优先级给你一套清晰可落地的调优思路。
调优第一步是减少线程
线程不是越多越快,上下文切换成本很高
Executors.xxx❌ 危险写法:
Executors.newFixedThreadPool(100);
Executors.newCachedThreadPool();
问题:
✅ 正确写法(手动创建):
new ThreadPoolExecutor(
corePoolSize,
maximumPoolSize,
keepAliveTime,
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(1000),
new NamedThreadFactory("biz-pool"),
new ThreadPoolExecutor.CallerRunsPolicy()
);
线程数 ≈ CPU 核数 + 1
线程数 ≈ CPU 核数 * (1 + IO等待时间 / CPU计算时间)
经验值:
| 场景 | 建议 |
|---|---|
| 高并发 | 有界队列 |
| 不能丢任务 | CallerRunsPolicy |
| 可丢弃 | DiscardPolicy |
| 重要任务 | 自定义拒绝日志 + 报警 |
// 错
synchronized (this) {
doA();
doB();
}
// 对
doA();
synchronized (this) {
doB();
}
| 场景 | 推荐 |
|---|---|
| 高并发读 | ReadWriteLock |
| 简单原子 | AtomicInteger |
| 复杂状态 | synchronized |
| 高性能 | StampedLock(谨慎) |
vmstat 中 cs 很高sleep / yield-Xss256k
(默认 1M,太多线程会 OOM)
top -H
jstack <pid>
jstat -gcutil <pid> 1000
vmstat 1
Java 多线程调优 = 少线程 + 小锁 + 好池子 + 强监控
如果你愿意,可以:
我可以直接帮你“对症下药”。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。