2011-12-13 14 views
-1

メインクラスに3つのスレッドがありますが、これらが同時に実行されている場合、どのようにして反復ランダムに各スレッドの発生を作ることができますか?例えば、私が持っている:Javaでランダムスレッドを選択

スレッド1

スレッド2

スレッド3

と最初の繰り返しで、それは次のようになります。スレッド2、スレッド1、スレッド3をし、 2番目に異なる組み合わせがある可能性があります。

また、スレッドごとに異なる結果があります。この場合、列挙が割り当てられます。 また、これらの3つのスレッドが実行されるたびに、これらのスレッドの結果を比較し、その結果に基づいて他の実行を実行する他の3つのスレッドがあります。その後、プロセスが再び開始されます。

+3

「反復ランダムの各スレッドの発生」という意味を明確にすることはできますか? – templatetypedef

+0

スレッドはどのような仕事をしていますか?彼らはただラインを印刷しているのですか、作業キューなどから消費していますか? – Gray

答えて

0

通知方法がある場合は、配列またはリストに格納し、任意の番号を選択して、どちらを希望するかを決めることができます。

また、各スレッドにランダムな時間を割り当てることもできます。sleep()それは十分なランダム性をもたらすはずですが、あなたが起きることが保証されていないと考えて、プロダクションコードには依存しないかもしれません。 (それは、彼らがすることを99.999999999%可能性がありますが、あなたがする余裕がないときに小さな割合は、常にそれが必要以上の方法より多くをポップアップ表示し、。)この最後の1のようなもので終わる可能性があることを

注:

スレッド1

スレッド2

スレッド1

糸3

スレッド2

0

タスクが同期メソッドまたはブロック内にない場合、タスクは同時に発生しています。別のスレッドが完了するまでスレッドを強制的に待機させる以外のタスクの完了順序を制御する方法はまったくありません。非常に非効率です。

タスクが同期メソッドまたはブロックの内部にある場合、同期ブロックは一度に1つのスレッドでしか実行できないため、マルチスレッドの最初の理由はありません。

関連する問題