ExecutorCompletionService是能够将多个任务并行同时处理,并将相应结果保存到队列里的并发类
public void TestExecutorCompletionService() throws Exception {
Executor defaultExecutor = Executors.newFixedThreadPool(10);
BlockingQueue queuePool = new BlockingQueuePool(8).getBlockingQueue();
;
ExecutorCompletionService ecs = new ExecutorCompletionService(
defaultExecutor, queuePool);
List<Future> futures = new ArrayList<Future>();
futures.add(ecs.submit(new SyncCheckTask("1111")));
futures.add(ecs.submit(new SyncCheckTask("2222")));
futures.add(ecs.submit(new SyncCheckTask("3333")));
futures.add(ecs.submit(new SyncCheckTask("4444")));
futures.add(ecs.submit(new SyncCheckTask("5555")));
futures.add(ecs.submit(new SyncCheckTask("6666")));
int i = 0;
while (i < 8) {
Future futrure = ecs.poll(3000, TimeUnit.MILLISECONDS);
Object result = null == futrure ? null : futrure.get();
System.out.println(result);
i++;
}
}
}
class SyncCheckTask implements Callable<String> {
String ss = null;
public SyncCheckTask(String ss) {
this.ss = ss;
}
public String call() throws Exception {
Thread.sleep(Integer.parseInt(ss));
return ss;
}