多くのシャットダウン操作を伴う高度な並行プログラムで、System.exit()を時期尚早に呼び出さずに終了コードを設定する方法を知りたいですか?「他のすべてが完了したときにこのコードを実行する」メソッドを設定することは可能ですか?しかし、私は本当に終了コードを時期尚早に設定したいと思います。
4 に答える
私があなたが望むものを正しく理解しているなら、どういうわけか終了コードを保持し、いくつかのメソッドを実行System.exit
してから、事前に決定された終了コードで呼び出します。
IMOがすべきことは、代わりにシャットダウンフックを使用することです。つまり、JVMがシャットダウンする前にコードが実行され、(要件を正しく取得した場合)単純なコーディング実装で同じ結果が得られます(つまり、状態変数と通常とは異なるコーディングロジックを使用して、実行しようとしていることを実現する代わりに)。 )。
他のすべてのスレッドが完了したときにのみシャットダウンするように、マスタースレッドに他のすべてのスレッドを生成させます。
多数のシャットダウン操作を伴う高度な並行プログラム
これは私にとってコードの臭いです。
複数のスレッドがどのようにシャットダウンしたいかは理解できますが、そうすることは許可されるべきではありません。
代わりに、と呼ばれるグローバルメソッドを作成しますinitiateShutdown(int code)
。このメソッドには、実際にシャットダウンするのが適切な時期を判断するためのロジックが含まれています。このメソッドからスレッドが戻ることを望まない場合があるため、ある種の決して戻らないロックを実装し、スレッドをこのロックの待機に委託することができます。
結果をどこかに保存し、適切な同期ツールを使用して、完了したことを通知します。完了したら、保存された結果を読み取り、System.exit(result)を使用して終了します。
複数のスレッドが結果を設定する場合、どちらを使用する必要がありますか?