新的JRuby绑定vs org.jruby.embed.localcontext.scope线程安全

时间:2018-07-19 10:52:56

标签: multithreading jruby java-scripting-engine

我的ScriptExecutor出现问题,这被多个线程调用。我不希望在两个不同线程中执行的两个脚本之间有任何干扰(所谓干扰,至少是指全局变量)

@Service
public class ScriptExecutor
{
    private ScriptEngine engine;

    public ScriptExecutor() 
    {
            System.setProperty("org.jruby.embed.localcontext.scope", "threadsafe");
            engine = new ScriptEngineManager().getEngineByName("jruby");
            engine.getContext().setWriter(new OutputStreamWriter(...));
            engine.getContext().setErrorWriter(new OutputStreamWriter(...));
    }

    public Object executeScript(String path, Object args){
    {
         //... Load script from path
         engine.eval(r);
         return (Invocable) engine.invokeFunction("myFunction", args);
    }
}

此实现线程安全吗?我的意思是:

  • 在每个线程中声明的全局jruby变量将仅在所述线程中可用(这是我从this page所了解的信息)
  • 我应该在每次调用executeScript时在新的上下文中调用eval(e,context)吗?我在考虑类似this solution
  • 这两个解决方案不相似吗?

0 个答案:

没有答案