package com.shop;
import java.util.concurrent.*;
import java.util.*;
/**
* @author liuyong 2012-3-22
*/
public class App {
private static final ExecutorService NEW_FIXED_THREAD_POOL = Executors.newFixedThreadPool(10);
private static CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>(
NEW_FIXED_THREAD_POOL);
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
DownLoader<Integer> downLoader = new DownLoader<Integer>();
downLoader.setIndex(i);
completionService.submit(downLoader);
}
for (int i = 0; i < 10; i++) {
try {
Future<Integer> future = completionService.take();
Integer str = future.get();
System.out.println("take file [" + str + "];" + "time ["
+ new Date() + "];");
} catch (InterruptedException e) {
break;
} catch (ExecutionException e) {
break;
}
}
NEW_FIXED_THREAD_POOL.shutdown();
System.out.println("ok");
}
private static class DownLoader<Integer> implements Callable<Integer> {
private Integer index;
public void setIndex(Integer index) {
this.index = index;
}
public Integer call() throws Exception {
try {
Random random = new Random();
Thread.sleep(random.nextInt(20) * 1000);
} catch (InterruptedException e) {
System.out.println(e);
}
return index;
}
}
}
java多线程编程获取线程返回值:ExecutorCompletionService
最新推荐文章于 2023-08-03 16:14:56 发布