Java 20的新特性

发布时间:2023-11-23 10:05
最后更新:2024-09-03 08:19
所属分类:
JVM Java

Java 20与Java 19一样也是一个小功能进化版本,其在Java 19的基础之上并没有引入太多的新功能,而是继续孵化之前版本中引入的功能。

Java 20计划于2023年3月21日发布,依旧不是长期支持版本。

本系列的文章有:

  1. Java 8的新特性
  2. Java 9的新特性
  3. Java 10的新特性
  4. Java 11的新特性
  5. Java 12的新特性
  6. Java 13的新特性
  7. Java 14的新特性
  8. Java 15的新特性
  9. Java 16的新特性
  10. Java 17的新特性
  11. Java 18的新特性
  12. Java 19的新特性
  13. Java 20的新特性
  14. Java 21的新特性

功能提案

在Java 20中主要增加了以下提案中的功能:

这些功能中有很多依旧是符合和预览了很多次的内容,这里只挑新出现的功能进行简要记录。

作用域值

在Java 19引入虚拟线程以后,用来确保线程安全的ThreadLocal的使用就开始显现出了问题。ThreadLocal可以为每一个线程创建一套独立的环境,使得各个线程之间可以分离开,但是这样一来在可以创建数百万个虚拟线程的环境下,数百万个ThreadLocal实例的存在将会对系统运行开销提出相当大的挑战。

作用域值的引入就是为了解决这个问题的。作用域值可以在线程内部和线程之间共享不可变值,允许在使用大量虚拟线程时以较低的开销传递和共享数据。

例如可以如以下示例一样来在各个线程中便捷的访问LOGGED_IN_USER

1
2
3
4
5
6
7
8
9
class Server {
  public final static ScopedValue<User> LOGGED_IN_USER = ScopedValue.newInstance();

  private void serve(Request request) {
    User loggedInUser = authenticate(request);
    ScopedValue.where(LOGGED_IN_USER, loggedInUser)
      .run(() -> restCon.processRequest(request));
  }
}

相应的在定义restCon变量的类的方法processRequest中,可以使用Server.LOGGED_IN_USER.get()来获取SceopedValue传递进来的值。


索引标签
JVM
Java
Java 20
新特性
作用域值