版本
- 适用于 JDK 23 的 GraalVM(最新)
- 适用于 JDK 24 的 GraalVM(抢先体验)
- 适用于 JDK 21 的 GraalVM
- 适用于 JDK 17 的 GraalVM
- 存档
- 开发版本
多线程
在 GraalVM 上运行 JavaScript 支持多线程。根据使用场景,线程可用于使用多个 Context
对象或多个 Worker 线程并行执行 JavaScript 代码。
Java 和 JavaScript 的多线程 #
在 Java 互操作性上下文中运行 JavaScript 时支持多线程。GraalVM 支持的多线程执行的基本模型是“无共享”模型,任何 JavaScript 开发人员都应该熟悉。
- 可以创建任意数量的 JavaScript
Context
,但它们应该一次由一个线程使用。 - 不允许并发访问 JavaScript 对象:任何 JavaScript 对象一次只能被一个线程访问。
- 允许并发访问 Java 对象:任何 Java 对象都可以被任何 Java 或 JavaScript 线程并发访问。
JavaScript Context
不能被两个或多个线程并发访问,但可以使用适当的同步从多个线程访问同一个 Context
,以确保永远不会发生并发访问。
示例 #
GraalJS 单元测试 包含几个 Java/JavaScript 多线程交互的示例。最值得注意的是它们描述了如何
- 多个
Context
对象可以在多个线程中执行. - 当使用适当的同步时,一个线程创建的 JavaScript 值可以在另一个线程中使用.
- 当使用适当的同步时,可以从多个线程访问
Context
. - 可以从 JavaScript 中使用 Java 并发.
- Java 对象可以被多个 JavaScript 线程并发访问.