できるだけ早く変更する必要がある次のシナリオがあります
。 1. 順次スレッドのグループが実行されます (3 つのスレッドが含まれます)
2. 別の順次スレッドのグループが実行されます (2 つのスレッドが含まれます)
3. 並列スレッドのグループが実行されます(スレッドの生産者と消費者のアプローチが正しく適用されるように、9 つのスレッドが含まれています)
このシナリオを作成した理由
最初に特定のスレッドを実行するには (ポイント 1: 3 つのスレッドを含む)、それらの処理が完了したら、別の 2 つのスレッドを実行する必要がありました (ポイント 2: 2 つのスレッドを含む)。ポイント 1 とポイント 2 がカバーされている場合にのみ、ポイント 3 を処理する必要がありました。
最初は、並列操作を処理するためにすべてのスレッドを実行する必要がありましたが、並列スレッドが同時に実行されるため、その考えはそのままにしました。
上記の状況では、何らかの問題が発生するまで、すべてがスムーズに機能しています。
上記のシナリオを変更する必要があるのはなぜですか?
並列スレッドの場合に適切に処理できる例外が発生することがあります。シーケンシャルスレッドに入ると同じ例外が発生し、処理できなくなります。そのため、シーケンシャル スレッドの他のすべての処理は、最初のスレッドが完了するまで待機状態になります。
そのため、並列スレッドの利点を活用する必要がありますが、簡単にするためにこの方法を選択したため、アプリケーションの状況を処理するのが難しくなりました。
そのため、一定の順序で異なる並列スレッドを実行するシナリオを作成する必要があります。例えば:
Order-1st = 最初の 3 つの並列スレッド
を処理 Order-2nd = 次の 2 つの並列スレッド
を処理 Order-3rd = 次の 9 つの並列スレッドを処理
また、上記のケースは多少制限されていますが、これには一般的な解決策が必要です。将来、Order-1 からさらに 2 つのスレッドを追加したい場合や、任意の注文のスレッドをいくつか削除した場合でも、グループのシーケンスは必要に応じて実行されるはずです。
指定した順序で実行できるように、並列スレッドのグループを作成できる Java の方法はありますか?
編集
変更を手伝っていただければ、次のコード スニペットがあります。
// レベル1
Thread[] threads = new Thread[list1.size()];
int j=0;
for(list1.size()){
Object delegator1 = new Object("Level-1");
Thread th = new Thread(delegator1);
threads[j]=th;
th.start();
j++;
}
for(Thread thread: threads){
thread.join();
}
// レベル2
threads = new Thread[list2.size()];
j=0;
for(list2.size()){
Object delegator2 = new Object("Level-2");
Thread th = new Thread(delegator2);
threads[j]=th;
th.start();
j++;
}
for(Thread thread: threads){
thread.join();
}
// レベル 3 & 4 --> 正常に動作する wait-notify を使用して適用された Producer-Consumer。
for(list3.size()){
Object delegator3 = new Object("Level-3 & 4")
Thread th = new Thread(delegator3);
th.start();
}
これらの異なるレベルを並行して実行したいのですが、最初のレベルが終了した場合、その後 2 番目のレベルを実行する必要があります。