有没有办法知道哪个平台线程正在承载当前虚拟线程或将虚拟线程固定到平台线程并在JDK19中获取其线程本地?我想在虚拟线程中重用一些对象,比如Golang中的sync.Pool。
来自JEP 425,JDK 19 中虚拟线程的规范:
虚拟线程无法获取运营商的身份。
所以,不,我认为没有任何方法可以确定哪个平台线程正在运行虚拟线程(即在 Java 代码中;有一些方法可以通过 Java Flight Recorder 等工具来观察这一点)。
固定线程是应该避免的事情[1],所以我怀疑是否有任何方法可以明确地做到这一点。来自同一个 JEP 425:
正在运行的虚拟线程在逻辑上独立于其当前载体
考虑到上面的引述以及相关的各种演示/文档,如果有一种方法可以通过 API 显式固定线程,我会感到非常惊讶。
最后,关于 ThreadLocals,[2] 中有一个讨论,其中 Project Loom 团队提到了在 ThreadLocals 中缓存昂贵对象的危险(请注意,他们没有提到对底层平台线程的访问)。我不熟悉 Go 结构,但你可能想考虑JEP 429。
[1] - 请参阅此处36m20s ,Project Loom 团队的演示
[2] - 请参阅此处35m01s ,Project Loom 团队的相同演示
| 归档时间: |
|
| 查看次数: |
379 次 |
| 最近记录: |