首页 > 解决方案 > `Thread.sleep` 与 Project Loom for Java 中的虚拟线程(纤维)不同吗

问题描述

Thread.sleep在试验或演示 Java 代码的并发性时使用。通过睡觉,我正在伪造一些需要一些时间的处理工作。

我想知道在Project Loom下这样做。

为了自学,我观看了 2020 年末与 Oracle 的 Ron Pressler 一起展示 Project Loom 技术的视频(此处此处)。虽然很有启发性,但我不记得他解决过休眠线程的问题。

标签: javathread-sleepfibersproject-loom

解决方案


  • 在带有虚拟线程(纤程)的 Project Loom 技术下,我们可以同样使用 Thread.sleep 吗?

看起来是这样。我参考了 OpenJDK wiki 上的页面,该页面解决了 Loom 中的阻塞操作。它列出Thread.sleep()了对虚拟线程友好的操作,这意味着

未固定时,它们将在操作阻塞时释放底层载体线程以执行其他工作。

你继续问,

  • 休眠虚拟线程与休眠平台/内核线程有什么不同或值得注意的吗?

文档很少,不清楚实际存在的任何差异是否是故意的。尽管如此,我倾向于认为目标是让虚拟线程休眠,使其语义尽可能接近休眠普通线程的语义。我怀疑会有足够聪明的程序来区分,但如果有任何差异上升到“值得注意”的水平,那么我预计它们将被视为错误。我部分基于推理,但我也建议您参考 java.net 上的State of Loom文档,其中列出了“关键要点”

  • 虚拟线程是一个线程——在代码中、在运行时、在调试器中和在分析器中。

  • 无需更改语言

(强调补充。)


推荐阅读