public class ProcessImpl implements Process {
@Override
public void process() {
List<Callable<Boolean>> tasks = new ArrayList<>();
for (int x = 1; x <= 5; x++) {
tasks.add(createTask(x));
}
for (int i = 1; i <= 6; i++) { //for each group, there are 6 groups
//this is a sequential executor
//DefaultThreadExecutor extends AbstractThreadExecutor
ExecutorService threadExecutor = new DefaultThreadExecutor();
try {
threadExecutor.invokeAll(tasks);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private Callable<Boolean> createTask(final int i) {
Callable<Boolean> task = new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
System.out.println("Performing task " + i + " on thread - " + Thread.currentThread().getName());
return true;
}
};
return task;
}
}
複数のタスクを実行しますthreadExecutor.invokeAll(tasks);
、タスクがMain
スレッドで実行されています。それはこのようなものを出力します。は、コードのこの部分では順次
Performing task 1 on thread - main
Performing task 2 on thread - main
Performing task 3 on thread - main
Performing task 4 on thread - main
Performing task 5 on thread - main
Performing task 1 on thread - main
私は6つのスレッド合計で、各スレッドは順次5つのタスクを完了する必要があり、グループごとスレッドを持って探しています。
これを達成するには、どうすればprocess()
を変更しますか?したがって、各スレッドは同時にすべてのスレッドを処理しており、各スレッドで5つのタスクを順番に処理しています他のスレッドを待っていません。 (私がご紹介しますランダムな睡眠と異なる場合があります)
結果
Performing task 1 on thread - group1
Performing task 1 on thread - group2
Performing task 2 on thread - group2
Performing task 1 on thread - group3
Performing task 2 on thread - group1
Performing task 3 on thread - group2
順番に言えば、順番に処理するということです。つまり、タスク2はタスク1を待たなければならないことを意味します。ここで正しい単語を使用しないことがあります。 –