gpt4 book ai didi

java - 使用Java ScriptEngine同步执行多个评估

转载 作者:行者123 更新时间:2023-12-01 15:20:51 24 4
gpt4 key购买 nike

如何使用单个Java ScriptEngine同步执行多个计算?

例如

method1 includes

sce.eval(code1);

method2 includes

sce.eval(code2);

如果两种方法同步,则​​评估会同时运行

最佳答案

同步和并发不能放在一起,因为一个是另一个的对立面。如果 eval 方法是同步的,则需要 2 个具有相同上下文的脚本引擎实例,如果不是,这里会提供有关并行/并发执行的说明。

如果您想同时运行这两种方法,则需要多个线程运行,因为单个线程将按顺序运行其执行管道。

同步意味着它是线程安全的,并且将对类的任何同步方法的所有调用进行排队。例如,如果 m1 和 m2 同步,线程 1 调用 m1,线程 2 调用 m2,第一个到达各自方法的线程将正确运行,而第二个线程将等待,直到另一个线程退出(不完全正确)该方法执行其方法的内部代码..

现在,如果您想同时运行多个线程,并且每个线程将运行自己的管道/执行攻击,则可以查看 Thread、ExecutorService 和 Executors 类。

最后,如果您希望两个线程共享相同的脚本引擎,则必须使用该对象的相同引用,最好的方法是将其提供给对象的构造函数。

但是,这就是出现问题的地方。如果脚本引擎不能很好地处理并发,这可能会导致一些模糊的奇怪行为,因此您必须阅读 scrupt 引擎的规范并验证您使用的实现是否是线程安全的(因此并发执行安全)。

简单的例子:

public void launchAsync(final String code) {
new Thread() {
public void run() {
engine.eval(code);
}
}.run();
}

这将以与主线程异步的方式执行代码,这意味着调用该方法两次将并行运行它们(在与此不同的线程中)。

关于java - 使用Java ScriptEngine同步执行多个评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10958180/

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