惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Project Zero
Project Zero
GbyAI
GbyAI
Y
Y Combinator Blog
Google DeepMind News
Google DeepMind News
小众软件
小众软件
The GitHub Blog
The GitHub Blog
阮一峰的网络日志
阮一峰的网络日志
J
Java Code Geeks
WordPress大学
WordPress大学
Microsoft Security Blog
Microsoft Security Blog
IT之家
IT之家
F
Fortinet All Blogs
博客园 - 【当耐特】
H
Hackread – Cybersecurity News, Data Breaches, AI and More
P
Proofpoint News Feed
Schneier on Security
Schneier on Security
C
Cybersecurity and Infrastructure Security Agency CISA
L
LINUX DO - 热门话题
Spread Privacy
Spread Privacy
O
OpenAI News
V
V2EX
博客园 - 三生石上(FineUI控件)
AI
AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Stack Overflow Blog
Stack Overflow Blog
P
Privacy International News Feed
Microsoft Azure Blog
Microsoft Azure Blog
Blog — PlanetScale
Blog — PlanetScale
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Jina AI
Jina AI
H
Help Net Security
L
LINUX DO - 最新话题
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
Tenable Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Cisco Talos Blog
Cisco Talos Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
博客园 - 叶小钗
V
Vulnerabilities – Threatpost
C
Cisco Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
酷 壳 – CoolShell
酷 壳 – CoolShell
Hacker News: Ask HN
Hacker News: Ask HN
S
Security @ Cisco Blogs
S
Securelist
T
The Blog of Author Tim Ferriss
Apple Machine Learning Research
Apple Machine Learning Research
美团技术团队
雷峰网
雷峰网
V2EX - 技术
V2EX - 技术

博客园 - 悠哉大斌

AI Agent 安全沙箱技术对比:E2B、Cube Sandbox 与 Docker Sandboxes linux 升级 claude code的坑 debian(WSL) apt 代理配置 linux内核之Namespaces、Cgroups、Capabilities、Seccomp和Landlock 大语言模型推理中的隐藏瓶颈及其解决方法 Docker Sandboxes 技术是什么,和docker容器有什么区别 什么是 Docker Agent以及一个Docker Agent示例 windows wsl 安装 Temurin® JDK claude Code 和 codex 作为编程代理,前者使用typescript开发,后者使用rust,他们的决策依据是什么 LLM 真的改变了编码风格吗? 如果人工智能会犯错且不精确,为什么它正在改变世界? Python 的协程模型和 JavaScript 的 async/await python闭包和function.__closure__特殊属性 python 的 dunder name和 sunder name 基于nodejs设计REST API的知名开源框架 windows上使用node-oracledb Thick 模式连接 Oracle 11g Claude Code CLI连接 DeepSeek V4模型后调用报400错误 python里对象(object)到底是什么 Python 泛型演变史 Python 类型别名的演变 Python 类型提示的演变史 PEP 593 新增的Annotated 类型 Alibaba AgentScope 和 microsoft agent framework 详细对比分析 spring AI Alibaba Agent Framework 和 agentscope有什么区别和联系 AI Agent协作模式以及主流开源框架对协作模式的支持 Tailscale 是如何接管 DNS 的? Agent = Model + Harness 使用rust编写typescript编译器的难点在什么地方,哪些数据结构是rust不擅长的? TypeScript/JavaScript 中的异步迭代语句 js中的生成器函数 Tailscale Serve and Funnel openclaw gateway的网络绑定模式 websocket协议和http协议有何依赖关系? MCP通信的双方是谁? claude code MCP 安装范围 如何在wsl2环境下给claude code cli 配置 playwright-mcp wsl的网络模式有哪几种,有哪些区别? AI Agent memory是什么? ai agent skills是什么? Go测试生态系统工具与最佳实践深度调研(聚焦认证授权系统) 线性代数中常见矩阵类型的概念关系思维导图 三种主流授权策略
Java 并发编程发展史与 java.util.concurrent 全景解析
悠哉大斌 · 2026-05-25 · via 博客园 - 悠哉大斌

Java并发编程的演进,是一场不断向下挖掘潜力,又不断向上构建抽象的历史。它反映了硬件从单核到多核的普及,也反映了开发者追求更简单、更高效编程模型的不懈努力。

下面,我将分阶段为你梳理这段发展历程。

📜 第一阶段:混沌初开,用线程与锁构建基础(JDK 1.0 - 1.4)

该阶段代表了一个从无到有的过程,核心是利用操作系统提供的线程和锁能力,建立并发编程的雏形。

在 Java 1.0 时代,并发的基石是 Thread 类和 synchronized 关键字。Thread 类在底层直接映射到操作系统线程,带来了较高的创建和切换成本。synchronized 虽提供了互斥锁,但早期的粗粒度锁容易成为性能瓶颈。Object 类的 wait()/notify() 方法作为线程协作原语,也极其容易出错(如错过通知和虚假唤醒)。

到了 JDK 1.2,ThreadLocal 的引入提供了一种新思路——通过为每个线程创建独立的变量副本,避免了共享资源的竞争。

这个阶段,开发者只能基于这些原始工具,自行实现线程池和生产者-消费者队列等高级模式,代码不仅复杂,且极易出错。

🚀 第二阶段:工业化革命,java.util.concurrent(JUC)包诞生(JDK 5)

JDK 5 引入 java.util.concurrent 包,就像启动了工业引擎,通过标准化的组件和线程池,将并发编程推向了现代。

这是并发编程史上真正意义的里程碑,由 Doug Lea 主导设计并引入的 java.util.concurrent(JUC)包,极大改变了开发模式。

  • 线程池标准化ExecutorServiceThreadPoolExecutor 终结了开发者自行管理线程池的时代,提供了标准、高效的任务执行框架。
  • 丰富同步工具CountDownLatch, CyclicBarrier, Semaphore 等同步器,为复杂的线程协调提供了现成的、可靠的方案。
  • 高效并发容器ConcurrentHashMap 等并发集合,通过精细化的锁机制(如分段锁)替代了笨重的 synchronized 包装,大幅提升了并发性能。
  • 无锁原子操作AtomicInteger 等原子类,利用 CAS 操作实现了细粒度的无锁线程安全,减少了锁竞争的开销。
  • 增强的任务模型CallableFuture 接口,让异步任务可以返回值并抛出受检异常,是对仅有 run() 方法的 Runnable 的强力补充。

✨ 第三阶段:能力提升,应对多核时代的并行计算(JDK 6 - 7)

随着多核 CPU 普及,并发能力从通用场景进一步向高性能并行计算倾斜。

  • JDK 6:JVM 对 synchronized 的狂飙优化:这是为 synchronized 正名的关键版本。JVM 引入了 “偏向锁 → 轻量级锁 → 重量级锁” 的锁升级机制,使 synchronized 的性能在多数场景下不亚于 ReentrantLock,极大地降低了无竞争时的性能开销。
  • JDK 7:Fork/Join 与 Phaser 的并行利器:Java 7 引入了 ForkJoinPool,核心是 “工作窃取算法”,空闲线程能主动从繁忙线程的队列尾“偷”任务,专为高效解决可递归分解的并行任务而生,是 parallelStream 的底层基础。同时,Phaser 作为一种更灵活的同步屏障,支持动态增减参与者,非常适合分阶段、参与者数量不确定的任务。

🧘 第四阶段:拥抱函数式与异步编程(JDK 8 - 9)

硬件性能不断挖掘,编程体验也迎来了“舒适区”的革新——Lambda、Stream 和 CompletableFuture 让代码更声明式、更异步。

  • JDK 8:并行流与 CompletableFuture 改变世界parallelStream 将函数式编程与并行结合,只需一行代码即可让集合处理并行化。CompletableFuture 则彻底改善了异步编程体验,它提供了 thenApplythenCombine 等丰富的 API,解决了传统 Future 无法链式调用的痛点,帮助开发者摆脱“回调地狱”。
  • JDK 9:拥抱响应式流(Reactive Streams):Java 9 通过 JEP 266 在 java.util.concurrent.Flow 类中引入了响应式流的核心API(Publisher, Subscriber 等),为 JVM 上的响应式编程提供了标准接口。同时,CompletableFuture 也得到了增强,增加了 orTimeoutcompleteOnTimeout 等实用方法。

🪶 第五阶段:革命性突破,从平台线程到虚拟线程(JDK 19 - 21+)

并发发展迎来了革命性突破,通过虚拟线程颠覆了传统的“一任务一线程”模型。

这是 Java 并发模型近二十年来最具革命性的变革。传统的 Java 线程与操作系统线程 1:1 映射,一个线程动辄占用数 MB 内存,难以支撑百万级并发。

以 Project Loom 为基础的虚拟线程(Virtual Threads)改变了这一局面:

  • 极低成本,海量并发:虚拟线程是 JVM 管理的轻量级实体,创建成本极低(内存占用为传统线程的千分之一),单机轻松支撑数百万并发。
  • 回归简单的编程模型:开发者可用传统的同步、顺序代码风格实现高并发,框架会自动处理挂起和恢复操作。

经过在 JDK 19 和 JDK 20 的预览,虚拟线程作为正式特性在 JDK 21 中推出。同时,JDK 21 还孵化(Incubator)了结构化并发 API(StructuredTaskScope),它将任务的生命周期绑定到代码块范围,旨在提升复杂并发场景的可观测性和健壮性,让线程的管理像 try-with-resources 一样优雅。

💎 总结

理解 Java 并发的发展史,也是理解并发哲学演变的过程:从共享可变的锁机制,逐渐向隔离与不可变演进。这种演变不仅是为了提升性能,也是为了从根本上简化复杂问题的处理,让我们能更聚焦于业务本身。