私が継承したコードは、さまざまな種類のデーモン スレッドを生成するサーバーであり、受信したリクエストに応答します。明らかに、これは危険であり、リファクタリングする必要があります。現在のように、デーモンの 1 つがリクエストを処理している間にメイン プログラムが停止すると、リクエストの途中でスレッドが強制終了され、何かが矛盾した状態になる可能性があります。
ただし、コードのさまざまな領域にまたがるかなりの数のスレッドがあります。シャットダウンが呼び出されたときにすべてのスレッドを手動で閉じる必要があるとしたら、あいまいなデーモンを見逃すことなく完全なロジック フローを取得するのは少し面倒かもしれません。
代わりに、デーモン スレッドのようなスレッドを作成したいと考えていますが、スレッドの一部のセクションをクリティカル セクションとしてマークまたはトグルすることができます。これにより、therad が完了するまで取得されなくなります。デーモンがリクエストをブロックして待機している間、デーモン スレッドのように動作し、VM の終了を妨げず、VM がシャットダウンしている場合はすぐに停止します。ただし、スレッドが特定の要求をアクティブに処理している間 (スレッドがアクティブな時間の一部)、スレッドは処理を行いません。完了してクリティカルセクションを終了するまで強制終了されます。スレッドが終了すると、それはクリティカル セクションであり、その後、強制終了できるようになります。理想的には、利用可能な非デーモン スレッドがなくなると、VM はシャットダウン プロセスをすぐに開始します。一部のデーモンがまだ重要な作業を行っている場合でも、重要な状態にないデーモンを取得し、残りの各「デーモン」が終了するのを待ちます。それは殺される可能性があるため、重要なポイントです。
このように動作する割り込みを適切に処理するために各スレッドを明示的に記述するのではなく、Thread クラス (おそらく私が作成したもの) をインスタンス化するか、ブール値を設定するだけで、この動作を取得する簡単な方法はありますか? そのようなスレッドで実行されているプラグインが割り込みを完全に処理するように記述されていない場合でも、スレッドはクリティカルセクションを適切に完了し、VM がシャットダウンするときに終了するように、ほとんどばかげた証明方法を探しています。