0

アプリケーションに初期化スレッドがあり、いくつかのサブスレッドを集約して順次実行します (必要なディレクトリを確認し、xml ファイルが利用可能かどうかを確認するなど)。要件が満たされない場合、プログラムを安全に終了させたい。

ここではどのようなアプローチを使用する必要がありますか?

  • 各サブスレッドがプログラムを終了する必要があり、要件が満たされていないことがわかった場合 (たとえば java System.exit(0);)、それは良い習慣ではないと思います。

  • 私が持っている別のアイデアは、各スレッドがグローバルマップにブール値を設定することです。マップは、スレッドの初期化後にチェックされます (ただし、サブスレッド 2 がサブスレッド 1 に依存している場合は問題になります)。利点は、アプリケーションが「ソフトに」終了できることです。

質問

したがって、開始要件が満たされない場合、プログラム (約 6 kLOC の中小規模のプロジェクト) を終了するための良い実践と見なされるもの. この概念には、(少なくとも) 詳細なエラー メッセージを出力する可能性が含まれている必要があります。


質問が広すぎたので。広さを減らすためにJavaに制限しています。さらに複雑にするために、並列処理を含む概念についても満足しています。

4

5 に答える 5

0

System.exit(0)成功した終了のために伝統的に使用されます。したがって、それ以外0はおそらくより良い選択です。

しかし、メイン プログラムによって処理される例外を各「サブプロセス」がスローしないのはなぜでしょうか。グローバルの設定にはコードの匂いがあります。

于 2013-09-04T15:56:33.193 に答える
0

サブプロセスを終了させ、java.lang.Process.exitValue() で戻りを確認します。サブプロセスの終了値は、エラーに固有のものである必要があります。

private static final int REQUIREMENT_1_NOT_MET = 1;
private static final int REQUIREMENT_2_NOT_MET = 2;

if (! checkRequirement1Conditions())
    System.exit(REQUIREMENT_1_NOT_MET);
if (! checkRequirement2Conditions())
    System.exit(REQUIREMENT_2_NOT_MET);

プロセスが実行を継続するように設計されている (つまり、条件が満たされない場合にのみ終了する) 場合、スローされる IllegalThreadStateException を無視する必要がある場合があります。

于 2013-09-04T16:13:28.673 に答える