gpt4 book ai didi

java - Rhino 并发访问 javax.script.ScriptEngine

转载 作者:太空狗 更新时间:2023-10-29 22:41:25 28 4
gpt4 key购买 nike

我通过 javax.script API 使用 Rhino 1.6r2。我知道犀牛引擎声称是MULTITHREADED: “引擎实现在内部是线程安全的,脚本可以并发执行,尽管脚本在一个线程上执行的效果可能对其他线程上的脚本可见。”

我想知道的是,在什么确切条件下一个脚本执行的效果对另一个脚本可见?在我的代码中,我有时会重复使用 ScriptEngine 对象,但对于每次执行,我都会创建一个新的 SimpleBindings 并将其传递给 eval(String, Bindings)。通过这种安排,内部状态是否有可能从一次执行泄漏到另一次执行?如果是,怎么办?

There's a very informative answer here ,但它完全告诉我我需要知道的内容。

最佳答案

javax.script 包是线程安全的,但如果您的脚本不是,则可能会出现并发问题。脚本中的全局变量对所有线程可见。因此,避免在 javascript 函数中使用全局变量

我现在遇到了这个问题。我的javascript如下:

function run(){
regex = 0;
regex += 1;
return regex;
}

我在 ThreadPool(4) 中运行它 10.000 次,并打印结果。

for (int i = 0; i <= 10000; i++){
executor.submit(new Runnable() {
@Override
public void run() {
try {
Double result = (Double) invocable.invokeFunction("run");
System.out.println(result);
} catch (Exception e) {}
}
});
}

这是输出的一部分:

1.0
2.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
2.0
1.0
1.0
0.0

关于java - Rhino 并发访问 javax.script.ScriptEngine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9138159/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com