5

我正在使用 Java 8。我不是 Java 专家(自 10 年前大学以来就没有看过 Java)

我创建了一个 ScriptEngine 的实例(如果重要的话是 Nashorn)。我用它来评估几个 javascript 文件。

该脚本在它自己的小 javascript 世界中非常愉快地运行。我喜欢它。

我还有一个 File System WatchService 正在运行,以防我的一些 java 脚本被修改。当它们被修改时,我创建一个新的 ScriptEngine,并使用新的 ScriptEngine 对象评估新版本的 javascript 文件。

我的问题是,一旦我创建了新的脚本引擎,我就无法“杀死”旧的脚本引擎。旧脚本无限期地继续运行。

我真的很想释放旧 scriptEngine 对象正在使用的资源。而且我希望它停止做它正在做的事情(因为如果他们都尝试做同样的事情,它可能与新实例发生冲突)。

那么......我如何完全消除旧的 ScriptEngine,包括其中产生的任何线程?

4

1 回答 1

0

好的,泄漏线程的老问题。你有线程的句柄吗?有什么东西继承了线程吗?好的,然后是这样的:

private void stopThread(Thread thread) {
    final Thread moribund = thread;
    if (moribund != null) {
        thread = null;
        moribund.interrupt();
    }
}

也许它有帮助。

于 2014-08-07T17:25:44.203 回答