私は Java 8 を使用しています。私は Java の専門家ではありません (10 年前の大学時代から Java を見たことはありません)。
ScriptEngine (重要な場合は Nashorn) のインスタンスを作成します。これを使用して、いくつかの JavaScript ファイルを評価します。
スクリプトは、独自の小さな JavaScript の世界で非常に楽しく動きます。大好きです。
一部の Java スクリプトが変更された場合に備えて、File System WatchService も実行しています。それらが変更されたら、新しい ScriptEngine を作成し、新しい ScriptEngine オブジェクトを使用して JavaScript ファイルの新しいバージョンを評価します。
私の問題は、新しいscriptEngineを作成すると、古いscriptEngineを「殺す」ことができないことです。古いスクリプトは無期限に実行され続けます。
古い scriptEngine オブジェクトによって使用されているリソースを解放したいと考えています。そして、私はそれがやっていることをやめる必要があります(両方が同じことをしようとすると、新しいインスタンスと競合する可能性があるため)。
では、内部で生成されたスレッドを含め、古い ScriptEngine を完全に削除するにはどうすればよいでしょうか?