是否有一种方法可以知道哪个平台线程正在承载当前的虚拟线程,或者将一个虚拟线程引向平台线程,并在JDK19中获取其线程本地?我想在虚拟线程中重用一些对象,比如Golang中的sync.Pool。
发布于 2022-12-01 02:14:36
在9月425中,JDK 19中虚拟线程的规范:
载体的标识对虚拟线程不可用。
因此,不,我不认为有任何方法可以确定哪个平台线程正在运行虚拟线程(即在Java代码中;有一些方法可以通过工具(如)来观察这一点)。
固定线程是需要避免的事情,因此我怀疑是否有任何方法可以显式地做到这一点。来自同一个JEP 425:
正在运行的虚拟线程在逻辑上与其当前载体无关。
考虑到上面的引用,以及相关的各种演示文稿/文档,如果有一种方法显式地通过API将线程固定在一起,我会感到非常惊讶。
最后,关于ThreadLocals,在第2次讨论中,Project团队提到了在ThreadLocals中缓存昂贵对象的危险(请注意,它们做的是,而不是提到对底层平台线程的访问)。我不熟悉Go构造,但您可能需要考虑范围-本地的9月429。
1-见项目织机小组的报告,36m20s 这里
2-参见35m01s 这里,项目织机小组的相同演示文稿
https://stackoverflow.com/questions/74630006
复制相似问题