複数のクライアントを処理するために複数のスレッドを生成する単純なサーバーを作成しています。サーバーが終了したときに、さまざまなストリームとスレッドをすべてシャットダウンして閉じる適切な方法を考えていました。
サーバーにシャットダウンを指示するメソッドを実行するshutdownHookを追加しました。次に、サーバーは、開いたすべてのスレッドにシャットダウン呼び出しをブロードキャストします。これにより、各スレッドの「isClosed」ブール値がtrueに設定されます。
私が期待しているのは、各スレッドがrun()メソッドの最後に到達して再びループすると、while(!isClosed)条件にヒットし、それによってすべての適切なソケット/ストリームを閉じて戻ることにより、適切に終了することです。
ただし、shutdownhookが完了した後にプログラムが終了する必要があるため、これですべてが適切に閉じられるかどうかはわかりません。終了メッセージを伝播するだけなので、かなり早く完了します。これは、一部のスレッドが適切に閉じるのに十分な時間がないことを意味しますか?
もしそうなら、戻る前に、shutdownhookですべてのスレッドを手動で閉じて、スレッドが閉じていることを確認するのが最善の方法でしょうか?