ExecutorService exec = Executors.newFixedThreadPool(8);
List<Future<Object>> results = new ArrayList<Future<Object>>();
// submit tasks
for(int i = 0; i < 8; i++) {
results.add(exec.submit(new ThreadTask()));
}
...
// stop the pool from accepting new tasks
exec.shutdown();
// wait for results
for(Future<Object> result: results) {
Object obj = result.get();
}
class ThreadTask implements Callable<Object> {
public Object call() {
// execute download
...
return result;
}
}
上記のコードでは、期待した結果が表示されません。より詳細には、私は android のダウンロード マネージャーを行っています。これらのスレッドは、ファイルをセグメントでダウンロードするためのものです。セグメントごとにダウンロードにかかる時間が異なる場合があるため、そこに問題があると思います。
次に、メソッド内で単純な数値リターンを使用してみました。その後、スレッドが期待どおりの結果を出し始めました。
そのため、解決策として、すべてのスレッドの実行が完了するまで待機するメソッドを実装することを考えました。上記のコードでは、すべてのスレッドが作業を終了するのをどのように待ちますか?. メソッドを使用する必要があると思いますが、そのwait()
方法がわかりません。これを理解するのに役立つことを願っています。
御時間ありがとうございます。