【发布时间】:2014-10-01 01:05:13
【问题描述】:
我正在使用 Java 8。我不是 Java 专家(自从 10 年前大学以来就没有研究过 Java)
我创建了一个 ScriptEngine 的实例(如果重要的话是 Nashorn)。 我用它来评估几个 javascript 文件。
脚本在它自己的小 JavaScript 世界中非常愉快地运行。我喜欢它。
我还运行了一个文件系统 WatchService,以防我的一些 java 脚本被修改。 当它们被修改时,我创建一个新的 ScriptEngine,并使用新的 ScriptEngine 对象评估新版本的 javascript 文件。
我的问题是,一旦我创建了新的脚本引擎,我就无法“杀死”旧的脚本引擎。旧脚本无限期地继续运行。
我真的很想释放旧 scriptEngine 对象正在使用的资源。而且我希望它停止做它正在做的事情(因为如果他们都尝试做同样的事情,它可能会与新实例发生冲突)。
那么...我如何完全消除旧的 ScriptEngine,包括其中产生的任何线程?
【问题讨论】:
-
考虑使用the concurrency utilities 代替原始线程。
-
你找到方法了吗?对我来说,这似乎是脚本引擎 API 中的一个漏洞。
-
@T.J.Crowder 基于这个关键缺陷,我完全放弃了这个项目。
-
@BrentLarsen:哇。哎哟。谢谢你告诉我。
标签: java javascript scriptengine nashorn