多线程

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

Java和JavaScript的多线程 #

在Java互操作的上下文中运行JavaScript时支持多线程。GraalVM支持的多线程执行基本模型是一种“不共享任何东西”(share-nothing)模型,这对于任何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. Java并发性可以从JavaScript中使用.
  5. Java对象可以被多个JavaScript线程并发访问.

联系我们