多线程 Java 脚本引擎
Multi Threading Java ScriptEngine
我有一个为每个线程创建的脚本引擎。问题是每个线程都在等待其他线程完成。线程应该是 运行ning 异步的。当我注释掉 ScriptEngine.eval() 行时,代码 运行s 就像应该
启动线程每次大约创建57个线程。
for (CalculationThread calcThread : this.calcThreads) {
calcThread.start();
}
为每个线程创建一个脚本管理器和脚本引擎。脚本引擎正在求解方程式 43.0*0.76282-0.154。这是一个非常简单的等式。
ScriptEngineManager mgr = new ScriptEngineManager();
for (ScriptEngineFactory sef : mgr.getEngineFactories()) {
if (sef.getParameter("THREADING") == null) {
System.out.println("this is not thread safe: " + this.threadName);
} else {
System.out.println("This is thread safe: " + this.threadName);
}
}
ScriptEngine engine = mgr.getEngineByName("js");
String modText = this.equationCalculation.getEquation();
for (int i = this.counter; i < this.counter + this.equationCalculation.getTileSize(); i++) {
String tempModText = "";
boolean noData = false;
boolean cannot = false;
tempModText = modText;
for (int j = 1; j < this.equationCalculation.getImages().size(); j++) {
// code that does stuff in the loop
}
//Code that does other stuff
try {
Number theNumber = (Number) engine.eval(tempModText);
this.equationCalculation.setOutputAtIndex(0,i,theNumber.floatValue());
} catch (ScriptException e) {
// TODO Auto-generated catch block
e.printStackTrace();
this.equationCalculation.setOutputAtIndex(0,i,0);
}
}
}
我的问题是我的脚本引擎实现有误吗?
当我注释掉脚本引擎评估字符串的位置时,它需要 20 秒才能 运行 抛出 5400 万像素,但是当离开脚本引擎时,它需要 21 分钟。
另一个问题,脚本引擎是否只是为了减慢我想要它做的事情?
请不要发表评论说您是在使用脚本引擎来求解该等式。
这里的问题是您使用的是脚本引擎。
评估字符串需要一段时间,我认为您正在为每个像素执行此操作。尽量不要在每次使用脚本时都对其进行评估。
可以预编译您的脚本。看看这个 post:
我有一个为每个线程创建的脚本引擎。问题是每个线程都在等待其他线程完成。线程应该是 运行ning 异步的。当我注释掉 ScriptEngine.eval() 行时,代码 运行s 就像应该
启动线程每次大约创建57个线程。
for (CalculationThread calcThread : this.calcThreads) {
calcThread.start();
}
为每个线程创建一个脚本管理器和脚本引擎。脚本引擎正在求解方程式 43.0*0.76282-0.154。这是一个非常简单的等式。
ScriptEngineManager mgr = new ScriptEngineManager();
for (ScriptEngineFactory sef : mgr.getEngineFactories()) {
if (sef.getParameter("THREADING") == null) {
System.out.println("this is not thread safe: " + this.threadName);
} else {
System.out.println("This is thread safe: " + this.threadName);
}
}
ScriptEngine engine = mgr.getEngineByName("js");
String modText = this.equationCalculation.getEquation();
for (int i = this.counter; i < this.counter + this.equationCalculation.getTileSize(); i++) {
String tempModText = "";
boolean noData = false;
boolean cannot = false;
tempModText = modText;
for (int j = 1; j < this.equationCalculation.getImages().size(); j++) {
// code that does stuff in the loop
}
//Code that does other stuff
try {
Number theNumber = (Number) engine.eval(tempModText);
this.equationCalculation.setOutputAtIndex(0,i,theNumber.floatValue());
} catch (ScriptException e) {
// TODO Auto-generated catch block
e.printStackTrace();
this.equationCalculation.setOutputAtIndex(0,i,0);
}
}
}
我的问题是我的脚本引擎实现有误吗?
当我注释掉脚本引擎评估字符串的位置时,它需要 20 秒才能 运行 抛出 5400 万像素,但是当离开脚本引擎时,它需要 21 分钟。
另一个问题,脚本引擎是否只是为了减慢我想要它做的事情?
请不要发表评论说您是在使用脚本引擎来求解该等式。
这里的问题是您使用的是脚本引擎。 评估字符串需要一段时间,我认为您正在为每个像素执行此操作。尽量不要在每次使用脚本时都对其进行评估。 可以预编译您的脚本。看看这个 post: