Proposed Java API Aims to Enhance Immutable Data Sharing Across Threads
A new proposal under consideration in the OpenJDK community could introduce a game-changing feature for Java, allowing for the sharing of immutable data across threads. This proposal outlines a new concept called “extent-local variables,” which would provide a model to share data both within a thread and with its child threads. The OpenJDK team believes this will be particularly useful when dealing with a large number of virtual threads, offering a more efficient alternative to the existing thread-local variables.
The proposed extent-local variables aim to address four primary goals, each geared toward improving how developers handle shared data. First is ease of use, which focuses on simplifying the process of reasoning about data flow between threads. This would make it much easier for developers to understand and control how data is passed between threads without introducing unnecessary complexity.
Comprehensibility is the second major objective, with the goal of making the lifecycle of shared data clearly visible from the syntax itself. This would help developers better understand when and how data is being shared, improving code maintainability and reducing the likelihood of errors related to data handling. The proposal also highlights the importance of robustness, ensuring that shared data can only be accessed by legitimate callees, thus preventing unauthorized access and enhancing security.
Finally, performance is a crucial consideration for this proposal. The extent-local variables would be designed to treat shared data as immutable, which would enable it to be safely shared across many threads without the usual synchronization overhead. This design choice would allow the runtime to optimize the way data is handled, leading to potential performance gains, especially in multi-threaded environments.
While the extent-local variables API is still in the incubating phase and is not slated for a specific release, it could potentially be included in Java 20, which is expected to be released in March 2023. As of now, Java 19, which is due to arrive in September 2022, will not include this feature, as the development window for new features has closed. However, the proposal shows promise for future versions of Java, especially as the use of virtual threads becomes more prevalent.