同一个线程中的多个ScriptEngine实例是否共享相同的引擎和全局上下文?

时间:2018-01-17 12:51:57

标签: java multithreading thread-safety nashorn scriptengine

我有两个类,如下所示。

public class A {
    private static ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
    private static Invocable invoker = null;
    private static Object obj = null;
    static {
        engine.eval("file.js");
        invoker = (Invocable) engine; // Will not be changed again
        obj = engine.get("ObjectName"); // Will not be changed again
        // Exceptions catching goes here
    }
    public static String method1(String[] args) {
        return invoker.invokeMethod(obj, "getValue", args[0], args[1]);
    }
    // More methods like this
}

public class B {
    public static Object methodB() {
        ScriptEngine engine = // New engine declaration same as above.
        return engine.eval("Some js string + function"); // changes dynamically.
    }
}

我是多线程概念的新手。所以我对此几乎没有疑问。

  1. A类中的引擎是与所有线程共享还是每个都有单独的引擎对象?
  2. A级和B级的发动机是否相同?即两者是否共用相同的发动机?如果是的话,他们也会分享相同的背景吗?
  3. 如果我在engine.eval(“file.js”)之后没有更改任何内部变量的值,只要只调用函数,我能否认为它是线程安全的?不会在A类引擎中进一步添加/删除/修改全局变量。
  4. 如果我从多个线程调用A类中的method1,它会同时/同时执行还是引擎一次只处理一个调用?

0 个答案:

没有答案