まず第一に、スレッド化されたアプリケーションの順序を定義するのは困難です。ここを参照してください:マルチスレッドでの不要な出力
特定の順序で出力が必要な場合は、おそらくExecutorService
を返す を使用する必要がありFuture
ます。Callable<String>
結果を返すそれぞれのサービスにクラスを送信します。送信は を返しますFuture<String>
。その後、ジョブをサービスに送信したのと同じ順序でget()
から呼び出すことができます。Future
// create a thread pool with 10 workers
ExecutorService threadPool = Executors.newFixedThreadPool(10);
// or you can create an open-ended thread pool
// ExecutorService threadPool = Executors.newCachedThreadPool();
// define your jobs somehow as a Callable that returns the line (prolly a string)
List<Future<String>> futures = threadPool.invokeAll(jobsToDo);
// once we have submitted all jobs to the thread pool, it should be shutdown
threadPool.shutdown();
// now we can go through the futures and get the results in order
for (Future<String> future : futures) {
// this returns the results from the `call()` in order or it throws
String resultFromCall = future.get();
}
ジョブCallable
クラスは次のようになります。
public class MyCallable implements Callable<String> {
private String input;
public MyCallable(String input) {
this.input = input;
}
public String call() {
// search the input string
String result = search(input);
return result;
}
}