package v1ch14.ThreadPoolTest;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
* @version 2010-10-18 下午05:11:11
* @author DaWei han
* @EMAIL handawei_1@126.com
*/
public class MyPoolTest {
/**
* @param args
* @throws ExecutionException
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException, ExecutionException {
//构造一个线程池
ExecutorService executor=Executors.newCachedThreadPool();
//构造一个顺序的执行器
ExecutorCompletionService<Integer> service=new ExecutorCompletionService<Integer>(executor);
List<Callable<Integer>> taks=getTasks();
for(Callable<Integer> call:taks)
{
//执行任务
service.submit(call);
}
for(int i=0;i<taks.size();i++)
{
//获得任务结果。它们是按结果的快慢排序的。
service.take().get();
}
//上面的线程池顺序服务是为了优化下面的线程池服务,因为下面的第一个任务可能很耗时,那么后面的就必须等待。
List<Future<Integer>> results= executor.invokeAll(taks);
for(Future<Integer> result:results)
{
result.get();
}
}
public static List<Callable<Integer>> getTasks()
{
return null;
}
}