ライブラリのシャットダウン時にスレッドを正しくクリーンアップしないサードパーティのライブラリを処理する場合の回避策は何ですか?
多くのライブラリは、そこに含まれるコードのライフサイクルメソッドを明示的または暗黙的に公開しています。たとえば、Webアプリケーションフレームワークは、サーブレットコンテナのWebアプリケーションコンテキスト内に存在します。コンテキストが作成されると、さまざまな理由で、フレームワークがいくつかのスレッドを開始する場合があります。
ここで、さらに例をとると、サーブレットコンテナまたはWebアプリケーションコンテキストがシャットダウンされると、Webアプリケーションフレームワークはこれらすべてのスレッドを終了する必要があります。ライブラリによって作成されたExecutorServiceをシャットダウンするか、これらのスレッドを停止する他の手段を実行する必要があります。
最悪の場合、スレッドは非デーモンスレッドです。これらは実際にはJavaプロセスの終了を停止します。ただし、デーモンスレッドであっても、スレッドの続行を許可することはおそらく悪い習慣です。(例に戻ると)サーブレットコンテナが他のコードに埋め込まれている場合、他のコードはスレッドを動かしたまま実行し続ける可能性があり、問題が発生する可能性があります。
これらのスレッドを停止するためのプログラム的な方法はありません。では、何ができるでしょうか。
このようなサードパーティのライブラリを使用している場合、既存のスレッドを強制的にシャットダウンする方法は何ですか?