Java新提案:Extent-Local变量

22-08-03 banq

Extent-Local 被提议作为一种在线程之间共享数据的新方式,它比 ThreadLocals 更轻量、更不可变,它包含更不容易出错的语法,并且与虚拟线程很好地配合使用。

目标
  • 易用性——提供一种在线程内和与子线程共享数据的编程模型,以简化对数据流的推理。
  • 可理解性——使共享数据的生命周期从代码的句法结构中可见。
  • 鲁棒性——确保调用者共享的数据只能由合法的被调用者检索。
  • 性能——将共享数据视为不可变的,以便允许大量线程共享,并启用运行时优化。


在虚拟线程编程中,线程局部变量比共享数据通常所需的复杂性更高,而且成本高昂且无法避免。如果 Java 平台提供了一种方法,可以为数千或数百万个虚拟线程提供不可变的每个线程数据,并且考虑到分叉虚拟线程的低成本,那么这将是理想的。因为这些每个线程的变量是不可变的,所以它们的数据可以被子线程有效地共享。此外,这些每个线程变量的生命周期应该是有限的:一旦最初共享数据的方法完成,通过每个线程变量共享的任何数据都应该变得不可用。
详细点击标题