多线程

在 GraalVM 上运行 JavaScript 支持多线程。根据使用场景,线程可用于使用多个 Context 对象或多个 Worker 线程并行执行 JavaScript 代码。

Java 和 JavaScript 的多线程 #

在 Java 互操作性上下文中运行 JavaScript 时支持多线程。GraalVM 支持的多线程执行的基本模型是“无共享”模型,任何 JavaScript 开发人员都应该熟悉。

  1. 可以创建任意数量的 JavaScript Context,但它们应该一次由一个线程使用。
  2. 不允许并发访问 JavaScript 对象:任何 JavaScript 对象一次只能被一个线程访问。
  3. 允许并发访问 Java 对象:任何 Java 对象都可以被任何 Java 或 JavaScript 线程并发访问。

JavaScript Context 不能被两个或多个线程并发访问,但可以使用适当的同步从多个线程访问同一个 Context,以确保永远不会发生并发访问。

示例 #

GraalJS 单元测试 包含几个 Java/JavaScript 多线程交互的示例。最值得注意的是它们描述了如何

  1. 多个 Context 对象可以在多个线程中执行.
  2. 当使用适当的同步时,一个线程创建的 JavaScript 值可以在另一个线程中使用.
  3. 当使用适当的同步时,可以从多个线程访问 Context.
  4. 可以从 JavaScript 中使用 Java 并发.
  5. Java 对象可以被多个 JavaScript 线程并发访问.

与我们联系