java - 多线程 Java ScriptEngine

标签 java multithreading scriptengine

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

启动线程 每次大约创建 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 分钟。

另一个问题,脚本引擎是否只是为了减慢我想要它做的事情?

请不要发表评论说您正在使用脚本引擎来求解该等式。

最佳答案

这里的问题是您使用的是脚本引擎。 评估字符串需要一段时间,我认为您正在为每个像素执行此操作。尽量不要在每次使用脚本时都对其进行评估。 可以预编译您的脚本。看看这篇文章: https://stackoverflow.com/questions/12220267/with-java-scriptengine-groovy-how-to-make-it-more-performant

关于java - 多线程 Java ScriptEngine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34420657/

相关文章:

java - 在运行时获取类的泛型类型

java - 可以在 Eclipse 命令行应用程序中隐藏 JVM 终止向导

java - 如何使用 cucumber-jvm、cucumber-serenity 和 SerenityObjectFactory 进行多态测试

java - Spring Cloud微服务服务器端口强制转换异常

multithreading - 将任务添加到特定线程的队列中

java - 将 Jruby ScriptEngine 输出重定向到 StringWriter

java - 从 Java 使用 ScriptEngine 调用自定义脚本函数

javascript - 使用 Rhino 代替 ScriptEngine 在 Java 中运行 Javascript 代码

c# - 锁定来自不同线程的方法范围的 "string"对象会阻止执行吗?

java - 线程执行器 - 初学者