代码之家  ›  专栏  ›  技术社区  ›  Jatin

Scala 2.12的ScriptEngine线程安全吗?

  •  0
  • Jatin  · 技术社区  · 7 年前

    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 回复  |  直到 7 年前
        1
  •  0
  •   Jatin    7 年前

    根据这条推文 confirmation 阿德里安·摩尔说,它不是线程安全的。

    推荐文章