全局视角看技术-Java多线程演进史
💡
原文中文,约10100字,阅读约需24分钟。
📝
内容提要
从1996年1月的JDK1.0版本开始,Java就建立了基本的线程模型,JDK5.0引入了Java内存模型和并发包,JDK6.0优化了synchronized,JDK7.0推出了Fork/Join框架,JDK8.0推出了CompletableFuture和Stream,JDK9.0改善了锁争用机制,JDK10推出了线程-局部管控,JDK15禁用和废弃偏向锁,JDK19支持虚拟线程,J.U.C提供了原子化对象、锁及工具套装、线程池、线程安全容器等,使Java的自动档时代到来,大大降低了程序员使用多线程的门槛。
🎯
关键要点
- Java从1996年开始建立基本的线程模型,历经多个版本演进。
- JDK19引入虚拟线程,支持JVM自身调度线程,提升性能。
- 文章不讨论技术实现原理和并发性库框架,专注于JDK多线程演进历史。
- 多线程演进可比作汽车发展,经历手动档、自动档和自动驾驶时代。
- 手动档时代(JDK1.4及以下)需要手动管理线程,容易导致资源浪费和死锁。
- JDK1.0确立了Java基础线程模型,采用抢占式调度方式。
- JDK1.2引入了wait/notify机制,禁止使用stop/resume/suspend。
- ThreadLocal和Collections的引入提升了多线程的使用便利性。
- 自动档时代(JDK5.0及以上)引入了并发包,降低了多线程使用门槛。
- JDK5.0引入J.U.C,提供了多种并发工具,极大简化了多线程编程。
- JDK6.0对synchronized进行了优化,提升了锁的性能。
- JDK7.0推出Fork/Join框架,支持递归任务拆解。
- JDK8.0引入CompletableFuture和Stream,增强了任务编排能力。
- JDK9.0改善了锁争用机制,提升了多线程应用性能。
- JDK10引入线程-局部管控,减少了全局停顿的时间。
- JDK15禁用偏向锁,提升了性能,适应现代应用需求。
- JDK19的虚拟线程使得Java进入自动驾驶时代,支持高并发处理。
- 虚拟线程支持传统编程风格,降低了学习和迁移成本。
➡️