public static void main(String[] args) throws ExecutionException, InterruptedException {
System.out.println("----程序开始运行----");
int taskSize = 2;
// 创建一个线程池
ExecutorService pool = Executors.newFixedThreadPool(taskSize);
try {
// 创建多个有返回值的任务
List<Future> list = new ArrayList();
for (int i = 0; i < taskSize; i++) {
Callable c = new MyCallable(i + " ");
// 执行任务并获取Future对象
Future f = pool.submit(c);
list.add(f);
}
String result = null;
flag: for(;;) {
for (Future f : list) {
Object s = null;
try {
s = f.get(100, TimeUnit.MILLISECONDS);
} catch (TimeoutException e) {}
// 单个查询返回的Future
System.out.println("===" + s);
if (s != null) {
result = s.toString();
break flag;
}
}
}
System.out.println("*********************"+ result);
} finally {
// 关闭线程池
pool.shutdown();
}
}
static class MyCallable implements Callable {
private String taskNum;
MyCallable(String taskNum) {
this.taskNum = taskNum;
}
@Override
public Object call() throws Exception {
System.out.println(">>>" + taskNum + "任务启动");
Date dateTmp1 = new Date();
int i = new Random().nextInt(1000);
System.out.println(">>>" + taskNum + "睡眠 "+ i +" ms");
Thread.sleep(i);
Date dateTmp2 = new Date();
long time = dateTmp2.getTime() - dateTmp1.getTime();
System.out.println(">>>" + taskNum + "任务终止");
return taskNum + "任务返回运行结果,当前任务时间【" + time + "毫秒】";
}
}