全局视角看技术-Java多线程演进史
内容提要
JDK19发布的最大亮点是支持虚拟线程,ThreadLocal提供无锁的多线程共享线程不安全对象,Collections提供线程安全集合,JDK 5.0引入J.U.C,JDK 6.0优化synchronized,JDK 7.0提供Fork/Join框架,JDK 8.0提供CompletableFuture和Stream,它们的核心竞争力分别是任务编排和流式处理。
关键要点
-
JDK19发布的最大亮点是支持虚拟线程,轻量级线程家族再添一员。
-
虚拟线程使JVM摆脱了操作系统调度线程的束缚,由JVM自身调度线程。
-
多线程的演进可以分为手动档时代、自动档时代和自动驾驶时代。
-
手动档时代(JDK1.4及以下)没有线程池,研发人员需手动管理线程和锁。
-
JDK 1.0确立了Java的基础线程模型,采用抢占式线程调度。
-
JDK 1.2引入了wait/notify/sleep机制,禁止了粗暴的stop/resume/suspend。
-
ThreadLocal提供无锁的多线程共享线程不安全对象的方案。
-
Collections工具类包装线程不安全集合为线程安全集合,提升了多线程使用的便利性。
-
自动档时代(JDK5.0及以后)引入了并发包J.U.C,降低了多线程编程的门槛。
-
J.U.C提供了原子化对象、锁及工具套装、线程池等多种工具。
-
JDK 6.0对synchronized进行了优化,提升了锁的性能。
-
JDK 7.0引入Fork/Join框架,支持递归式任务拆解和结果合并。
-
JDK 8.0引入CompletableFuture和Stream,分别解决任务编排和函数式编程需求。
-
JDK 9.0改善了锁争用机制,提升了多线程应用性能。
-
JDK 10引入线程-局部管控,减少了全局停顿的时间。
-
JDK 15禁用和废弃偏向锁,提升了性能。
-
JDK 19的虚拟线程使得Java进入自动驾驶时代,支持高并发处理。