Java通过JEP 491应对固定问题

Java通过JEP 491应对固定问题

💡 原文英文,约700词,阅读约需3分钟。
📝

内容提要

JEP 491提议在JDK 24中改进Java虚拟线程的同步机制,解决“固定”问题,提升线程可扩展性。该提案允许虚拟线程在同步块中解锁,释放平台线程,从而提高并发性,简化开发者工作,避免代码重构,同时保留同步优势。

🎯

关键要点

  • JEP 491提议在JDK 24中改进Java虚拟线程的同步机制,解决固定问题,提升线程可扩展性。
  • 虚拟线程允许应用程序使用数十万线程,提高吞吐量,但同步关键字导致的固定问题限制了开发者的使用。
  • 当前模型中,JVM将监视器锁与平台线程关联,导致虚拟线程被固定,限制了可扩展性。
  • JEP 491提议允许虚拟线程在同步块中解锁,释放平台线程以执行其他虚拟线程。
  • JDK记录jdk.VirtualThreadPinned事件,帮助开发者识别问题代码,未来将仅在虚拟线程与本地代码交互时相关。
  • jdk.tracePinnedThreads系统属性将被移除,以避免性能问题。
  • 提议重新实现synchronized关键字,使虚拟线程能够在不绑定到承载线程的情况下获取、持有和释放监视器。
  • 虚拟线程在同步块中调用Object.wait()时将解除绑定,允许更好的应用程序扩展性。
  • JEP 491承认某些特殊场景仍会固定虚拟线程,如类初始化和符号引用解析,但这些情况相对少见。
  • 替代方案包括增加虚拟线程调度器的并行性或动态重写字节码,但这些方案存在性能和兼容性问题。
  • JEP 491将是Java虚拟线程发展的关键一步,简化Java的并发模型,支持高吞吐量应用程序的构建。
➡️

继续阅读