jrunscript与jjs中的线程

时间:2018-06-21 00:04:49

标签: java rhino nashorn

我有一个基于jrunscript的系统(目前),因为它能够使用Java 8 Sun Rhino之前的实现以及Nashorn来运行脚本。

发生了很多事情,但是我目前面临的挑战归结为以下事实:无论脚本处于何种执行状态,该工具本身都会退出JVM(与Java main()方法不同,例如)。

例如,这是一个名为thread.js的脚本:

load("nashorn:mozilla_compat.js");
var thread = new JavaAdapter(
        Packages.java.lang.Runnable,
        {
                run: function() {
                        for (var i=0; i<10; i++) {
                            Packages.java.lang.System.err.println("i = " + i);
                            Packages.java.lang.Thread.sleep(500);
                        }
                }
        }
);
new Packages.java.lang.Thread(thread).start();
Packages.java.lang.System.err.println("Started.");

使用jrunscript thread.js输出:

Started.
i = 0

使用jjs thread.js输出:

i = 0
Started.
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9

jjs的输出是我所期望的。

是否有一种方法可以使jrunscript的行为像jjs一样?我已经考虑过在我的jrunscript脚本的末尾使用忙等待循环的可能性(但没有实现),该循环一直循环到VM中只剩下一个非守护线程为止,所以我有一种方法。但是可怜的人。

有想法吗?

0 个答案:

没有答案