`Scala` 2.12 的`ScriptEngine` 是线程安全的吗?

Is `ScriptEngine` of `Scala` 2.12 thread-safe?

ScalaScriptEngine 是线程安全的吗?这是基于 Scala-2.12 的实现:

import java.util.concurrent.Executors    
import javax.script._    
import scala.concurrent.duration._
import scala.concurrent.{Await, ExecutionContext, Future}

object Prac extends App {

  val scripter = new ScriptEngineManager().getEngineByName("scala")

  val exe = Executors.newFixedThreadPool(100)
  implicit val e = ExecutionContext.fromExecutor(exe)

  val ans = for {
    x <- 1 to 100
  } yield Future {
      val bindings = scripter.createBindings()
      bindings.put("x", x)
      val script = scripter.eval(
        """

      def sqrt(n:Int) = math.sqrt(n)

      sqrt(x.asInstanceOf[Int])

    """.stripMargin, bindings)
      require(script == math.sqrt(x))
      println(x+" - " + script)
  }
  Await.result(Future.sequence(ans), 20 seconds)

}

如果 运行 并行,则以上操作失败。如果 运行 顺序运行,则运行良好。

根据 Adriaan Moors 的这条推文 confirmation,它不是线程安全的。