5

私は Java 8 を使用しています。私は Java の専門家ではありません (10 年前の大学時代から Java を見たことはありません)。

ScriptEngine (重要な場合は Nashorn) のインスタンスを作成します。これを使用して、いくつかの JavaScript ファイルを評価します。

スクリプトは、独自の小さな JavaScript の世界で非常に楽しく動きます。大好きです。

一部の Java スクリプトが変更された場合に備えて、File System WatchService も実行しています。それらが変更されたら、新しい ScriptEngine を作成し、新しい ScriptEngine オブジェクトを使用して JavaScript ファイルの新しいバージョンを評価します。

私の問題は、新しいscriptEngineを作成すると、古いscriptEngineを「殺す」ことができないことです。古いスクリプトは無期限に実行され続けます。

古い 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 に答える