银鞍照白马, 飒沓如流星

JDK21 GA

    Java

  1. Features
    1. JEP 444 - Virtual Threads
    2. JEP 439 - Generational ZGC
    3. JEP 453 - Strucutred Concurrency (Preview)
  2. 其他

饱受期待的 JDK21 终于正式发布了,Virtual Threads 脱离了预览阶段,并发编程里程碑式的时代来临了,期待更多框架的升级。

Features

JEP 444 - Virtual Threads

虚拟线程类似于 Golang 中的 goroutine,是用户态的线程,由 JVM 管理,采用 M:N 调度。可以轻易的创建大量虚拟线程,而不需要担心资源的消耗。
同时根据 JEP 描述,虚拟线程并不会改变 Java 的基本并发模型,同时保持对java.lang.Thread API 的兼容,可以更小的改动来使用虚拟线程。

JEP 439 - Generational ZGC

JDK11 就引入了 ZGC,当时还在公司进行了分享,当时提到 ZGC 并支持分代 GC,现在它来了,ZGC 在 JDK21 中支持分代 GC 了。
在实际业务场景中,可预期的会大幅提高 GC 效率,并且不会明显降低吞吐量。因为实际场景中,大部分对象都是朝生夕死的。

JEP 453 - Strucutred Concurrency (Preview)

JDK21 还有一个令人期待的特性,Structured Concurrency,结构化并发。
阅读了 JEP 描述,感觉这个特性是也是会对 Java 并发编程带来非常大的变化,让并发逻辑更加可控和安全。

Structured concurrency is an approach to concurrent programming that preserves the natural relationship between tasks and subtasks, which leads to more readable, maintainable, and reliable concurrent code. The term “structured concurrency” was coined by Martin Sústrik and popularized by Nathaniel J. Smith. Ideas from other languages, such as Erlang’s hierarchical supervisors, inform the design of error handling in structured concurrency.

1
2
3
4
5
6
7
8
9
10
11
12
Response handle() throws ExecutionException, InterruptedException {
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
Supplier<String> user = scope.fork(() -> findUser());
Supplier<Integer> order = scope.fork(() -> fetchOrder());

scope.join() // Join both subtasks
.throwIfFailed(); // ... and propagate errors

// Here, both subtasks have succeeded, so compose their results
return new Response(user.get(), order.get());
}
}

通过实例代码可以看出,Structured Concurrency 通过 StructuredTaskScope 来管理子任务

  • 短路错误处理 — 如果 findUser()fetchOrder() 子任务失败,则另一个子任务(如果尚未完成)将被取消。
  • 取消传播 - 如果运行 handle() 的线程在调用 join() 之前或期间被中断,则当线程退出作用域时,两个子任务都会自动取消。
  • 清晰性 - 上面的代码有一个清晰的结构:设置子任务,等待它们完成或被取消,然后决定是成功(并处理已经完成的子任务的结果)还是失败(和子任务已经完成,所以没有什么需要清理的)。
  • 可观察性 - 线程转储清楚地显示任务层次结构,其中运行 findUser()fetchOrder() 的线程显示为范围的子级。

期待这个特性也可以早日转正。

其他

JDK21 为并发编程提供了更强有力的支持,可以让并发编程变的更加简单,其他团队可以早日脱离 JDK7(真的是老古董了哟)。

不过好像要学习的东西变得更多了,希望可以在我换工作时面试官的知识库还没有更新,hhh~

page PV:  ・  site PV:  ・  site UV: