Является ли `ScriptEngine` из` Scala` 2.12 поточно-ориентированным? - PullRequest
0 голосов
/ 06 июня 2018

Является ли ScriptEngine из Scala поточно-ориентированным?Это из 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)

}

Вышеперечисленное не выполняется, если выполняется параллельно.Работает отлично, если работает последовательно.

1 Ответ

0 голосов
/ 07 июня 2018

Согласно этому твиту подтверждение от Adriaan Moors, это не потокобезопасно.

...