我使用的是Java 8。我不是java专家(从10年前上大学开始就没看过java )。
我创建了一个ScriptEngine的实例(如果重要的话,是Nashorn)。我用它来评估几个javascript文件。
这个脚本在它自己的javascript小世界里运行得相当愉快。我爱死它了。
我还有一个正在运行的文件系统WatchService,以防我的一些java脚本被修改。当它们被修改时,我创建一个新的ScriptEngine,并使用新的ScriptEngine对象对新版本的javascript文件求值。
我的问题是,一旦我创建了新的scriptEngine,我就不能“杀死”旧的one。旧的脚本一直在无限期地运行。
我真的想释放旧的scriptEngine对象正在使用的资源。我希望它停止做它正在做的事情(因为如果它们都尝试做相同的事情,它可能会与新实例冲突)。
所以..。我如何完全消除旧的ScriptEngine,包括它内部产生的任何线程?
发布于 2014-08-08 01:25:44
好的,旧的问题与泄漏的线程。你拿到线的把手了吗?有什么东西继承了线程吗?好的,然后是这样的:
private void stopThread(Thread thread) {
final Thread moribund = thread;
if (moribund != null) {
thread = null;
moribund.interrupt();
}
}也许这会有帮助。
https://stackoverflow.com/questions/25188452
复制相似问题