Java5の並行処理ライブラリ

queueの仕組みを組み込む必要があったのでせっかくだからJava5から利用できるようになったライブラリを使ってみた。

呼び出し元のスレッドに処理結果を返せるってところがいいですね。

import java.util.concurrent.CompletionService;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

/**
 * 値を返すことのできる非同期処理
 * Futureを利用することにより処理結果を呼び出し元のスレッドに渡すことができる
 * CompletionServiceを利用することによりスレッドが終了した順に値を取り出すことができる
 *
 */
class Main4 {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		Util.println("main");
		ExecutorService ex = Executors.newCachedThreadPool();
		CompletionService cs = new ExecutorCompletionService(ex);
		for (int i = 0; i < 4; i++) {
			cs.submit(new RandomWaitCall());
			Util.println("submit");
		}
		ex.shutdown();
		for (int i = 0; i < 4; i++) {
			Future f = cs.take();
			int r = f.get();
			Util.println("" + r);
		}
	}
}