私は...タイトルをより適切に表現する方法が本当にわかりません。しかし、基本的に、私が持っているのは、これらすべてのスレッドが忙しく動作しているスレッド プールです。配属された順番で結果を報告してもらいたいが、同時にバッチで作業したい。説明すると、例は次のようになります
ExecutorService exec = Executors.newFixedThreadPool(8);
class MyCallable implements Callable<byte[]> {
private final int threadnumber;
MyCallable(int threadnumber){
this.threadnumber = threadnumber;
}
public byte[] call() {
//does something
}
}
List<Callable<byte[]>> callables = new ArrayList<Callable<byte[]>>();
for(int i=1; i<=20; i++) {
callables.add(new MyCallable(i));
}
try {
List<Future<byte[]>> results = exec.invokeAll(callables);
for(Future<byte[]> result: results) {
System.out.write(result.get(), 0, result.get().length);
}
基本的に、プール スレッドには 8 つのスレッドがあり、最終的に 20 のタスクがあります (これらは単なる例です)。私が正しく理解している場合、これが現在機能する方法は、20 個のタスクすべてが完了するまで待機してから、それらを順番に出力することです (1 から 20 まで)。このプログラムが行うことになっているのは、バイトの連続ストリームを出力することです (スレッドによって処理され、順序をそのまま維持する必要があるため、future インターフェイスを使用しました)。20 個のタスクがすべて完了するまで待ってもかまいませんが、とにかく、スレッドが進むにつれて順番に出力されるようにする必要があります。
方法がない場合や、invokeAll の仕組みを完全に誤解している場合は、その説明も歓迎します。事前にたくさんありがとう!Executor について知ったばかりなので、少し混乱しています。
ランダムな補遺ですが、callable からバイト配列を返すことはできますか?