全局视角看技术-Java多线程演进史

💡 原文中文,约11300字,阅读约需27分钟。
📝

内容提要

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进入自动驾驶时代,支持高并发处理。
➡️

继续阅读