Java 20与Java 19一样也是一个小功能进化版本,其在Java 19的基础之上并没有引入太多的新功能,而是继续孵化之前版本中引入的功能。
Java 20计划于2023年3月21日发布,依旧不是长期支持版本。
本系列的文章有:
- Java 8的新特性
- Java 9的新特性
- Java 10的新特性
- Java 11的新特性
- Java 12的新特性
- Java 13的新特性
- Java 14的新特性
- Java 15的新特性
- Java 16的新特性
- Java 17的新特性
- Java 18的新特性
- Java 19的新特性
- Java 20的新特性
- Java 21的新特性
功能提案
在Java 20中主要增加了以下提案中的功能:
- JEP 429: Scoped Values (Incubator)
- JEP 432: Record Patterns (Second Preview)
- JEP 433: Pattern Matching for switch (Fourth Preview)
- JEP 434: Foreign Function & Memory API (Second Preview)
- JEP 436: Virtual Threads (Second Preview)
- JEP 437: Structured Concurrency (Second Incubator)
- JEP 438: Vector API (Fifth Incubator)
这些功能中有很多依旧是符合和预览了很多次的内容,这里只挑新出现的功能进行简要记录。
作用域值
在Java 19引入虚拟线程以后,用来确保线程安全的ThreadLocal
的使用就开始显现出了问题。ThreadLocal
可以为每一个线程创建一套独立的环境,使得各个线程之间可以分离开,但是这样一来在可以创建数百万个虚拟线程的环境下,数百万个ThreadLocal
实例的存在将会对系统运行开销提出相当大的挑战。
作用域值的引入就是为了解决这个问题的。作用域值可以在线程内部和线程之间共享不可变值,允许在使用大量虚拟线程时以较低的开销传递和共享数据。
例如可以如以下示例一样来在各个线程中便捷的访问LOGGED_IN_USER
。
|
|
相应的在定义restCon
变量的类的方法processRequest
中,可以使用Server.LOGGED_IN_USER.get()
来获取SceopedValue
传递进来的值。