全局视角看技术-Java多线程演进史
内容提要
从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进入自动驾驶时代,支持高并发处理。
-
虚拟线程支持传统编程风格,降低了学习和迁移成本。