java - `Thread.sleep` 与 Project Loom for Java 中的虚拟线程(纤维)不同吗
问题描述
我Thread.sleep
在试验或演示 Java 代码的并发性时使用。通过睡觉,我正在伪造一些需要一些时间的处理工作。
我想知道在Project Loom下这样做。
- 在Project Loom技术下使用虚拟线程(纤
Thread.sleep
程),我们可以同样使用吗? - 休眠虚拟线程与休眠平台/内核线程有什么不同或值得注意的吗?
为了自学,我观看了 2020 年末与 Oracle 的 Ron Pressler 一起展示 Project Loom 技术的视频(此处,此处)。虽然很有启发性,但我不记得他解决过休眠线程的问题。
解决方案
- 在带有虚拟线程(纤程)的 Project Loom 技术下,我们可以同样使用 Thread.sleep 吗?
看起来是这样。我参考了 OpenJDK wiki 上的页面,该页面解决了 Loom 中的阻塞操作。它列出Thread.sleep()
了对虚拟线程友好的操作,这意味着
未固定时,它们将在操作阻塞时释放底层载体线程以执行其他工作。
你继续问,
- 休眠虚拟线程与休眠平台/内核线程有什么不同或值得注意的吗?
文档很少,不清楚实际存在的任何差异是否是故意的。尽管如此,我倾向于认为目标是让虚拟线程休眠,使其语义尽可能接近休眠普通线程的语义。我怀疑会有足够聪明的程序来区分,但如果有任何差异上升到“值得注意”的水平,那么我预计它们将被视为错误。我部分基于推理,但我也建议您参考 java.net 上的State of Loom文档,其中列出了“关键要点”
- 虚拟线程是一个线程——在代码中、在运行时、在调试器中和在分析器中。
和
- 无需更改语言。
(强调补充。)
推荐阅读
- symfony - 在 symfony 2.8 中使用 uploadtask 上传文件 api
- python - Python for 循环仅返回字典的最后一个值
- mysql - 更改 my.ini 后无法启动 MySQL 服务
- apache-kafka - JBPM:当Kafka Topic中有消息时触发业务流程
- google-colaboratory - 如何在不影响互联网中断的情况下在 Colab 中训练模型?
- python - 具有距离阈值停止准则的编辑距离矩阵的单链接聚类
- dart - 如何设置文本字段宽度?
- go - 为什么我在下面的 golang 代码示例中使用 defer 得到 0 和 1
- android - 如何使用 Kotlin 和 Moshi 在 Android 中将 JSON 2019-04-28T00:00:00 格式转换为 GregorianCalender
- ibm-cloud - IBM Cloud Dedicated 是在企业网络中部署我们的应用程序的正确解决方案吗?