问题标签 [project-loom]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 在 IDEA 上运行 loom 演示
我想运行 loom 的演示,我从http://jdk.java.net/loom/下载了 jdk18-loom ,并下载了最新版本IDEA
:
无论我选择X
还是17-preview
,程序都无法运行,报告:
Executors.newVirtualThreadPerTaskExecutor() Is an API in a preview feature
。
如何解决?</p>
java - 如何在 sdkman 中设置自定义 JDK 构建?
通过从http://jdk.java.net/loom/下载文件,解压缩它(我有一个名为 的目录jdk-18
),将JAVA_HOME
env var 设置为jdk-18
目录,并将bin
构建的子目录添加到我的PATH
env var 的开头。我能够使用构建来编译和运行使用虚拟线程预览功能的 Java 程序。
但这感觉像是一个非常手动的过程。我喜欢 SDKMAN 如何在我的系统上管理 JDK。如何将此早期访问版本(或任何其他 JDK 版本)设置为 SDKMAN 管理的 JDK 列表中的条目,以便我可以更改它,例如,通过键入sdk default java <my-jdk-18-name>
?
java - 虚拟线程如何映射到实际线程
如前所述,虚拟线程最终会映射到实际线程。假设创建了 100 万个虚拟线程。在 8 核处理器中,我假设将有 8 个内核线程。所以,我的问题是
- 100 万个虚拟线程如何映射到 8 个内核线程?这背后的算法是什么?
- 为什么阻塞在虚拟线程中很便宜?据我了解,这是因为它不会阻塞运营商(内核)线程。但是内核线程使用上下文切换,为什么它仍然很便宜?
- 虚拟线程是否适合代码需要调用本机方法的用例(public native String getSystemTime();)
java - Java结构化并发
结构化并发:
一个简单的原则,即当执行流分成多个并发流时,它们会在同一个代码块中重新加入。
基于此,假设我有如下内容:
问题 1: 我创建了一个新的子线程(TaskDeligatorThread),但没有在同一个代码块中完成/结束/重新加入,即方法delegateTask() - 这是否意味着它不遵循结构化并发原则?
问题 2: 可能存在 Thread1 想要将某些任务委托给子线程(Thread1 将创建)而 Thread1 不需要等待子线程的输出/完成的情况。在这种情况下,我再次不会在创建子线程的代码块中完成/结束/重新加入子线程。在这种情况下,我将如何遵循结构化并发?