Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多线程Java脚本引擎_Java_Multithreading_Scriptengine - Fatal编程技术网

多线程Java脚本引擎

多线程Java脚本引擎,java,multithreading,scriptengine,Java,Multithreading,Scriptengine,我有一个为每个线程创建的脚本引擎。问题是每个线程都在等待其他线程完成。线程应该是异步运行的。当我注释掉ScriptEngine.eval()行的位置时,代码的运行方式与应该的一样 启动线程每次大约创建57个线程。 为每个线程创建脚本管理器和脚本引擎。脚本引擎正在解一个43.0*0.76282-0.154的方程。这是一个非常简单的方程。 ScriptEngineManager mgr=new-ScriptEngineManager(); 对于(ScriptEngineFactory sef:m

我有一个为每个线程创建的脚本引擎。问题是每个线程都在等待其他线程完成。线程应该是异步运行的。当我注释掉ScriptEngine.eval()行的位置时,代码的运行方式与应该的一样

启动线程每次大约创建57个线程。

为每个线程创建脚本管理器和脚本引擎。脚本引擎正在解一个43.0*0.76282-0.154的方程。这是一个非常简单的方程。

ScriptEngineManager mgr=new-ScriptEngineManager();
对于(ScriptEngineFactory sef:mgr.getEngineFactorys()){
if(sef.getParameter(“线程”)==null){
System.out.println(“这不是线程安全的:+this.threadName”);
}否则{
System.out.println(“这是线程安全的:+This.threadName”);
}
}
ScriptEngine=mgr.getEngineByName(“js”);
String modText=this.equationCalculation.getEquation();
for(int i=this.counter;i
我的问题是脚本引擎是否实现错误? 当我注释出脚本引擎评估字符串的位置时,运行该字符串需要20秒,抛出5400万像素,但当脚本引擎离开时,需要21分钟。

另一个问题是,脚本引擎只是为了让我想要它做的事情变慢吗


请不要留下评论说您使用脚本引擎来解决这个问题。

这里的问题是您使用的是脚本引擎。 对字符串求值需要一段时间,我认为您正在对每个像素进行求值。尽量不要每次使用脚本时都对其求值。 有可能预编译脚本。看看这篇文章:

在我给出的示例等式(43.0*0.76282-0.154)中,值43.0改变为等于I处像素的值。预编译脚本是否仍能提高性能
for (CalculationThread calcThread : this.calcThreads) {
    calcThread.start();
}
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);
                    }
            }
        }