/**
* Future和Callable的使用
*/
public static void main(String[] args) {
ExecutorService service = Executors.newSingleThreadExecutor();
Future<String> future = service.submit(new Callable<String>() {
@Override
public String call() throws Exception {
Thread.sleep(2000);
return "hello";
}
});
System.out.println("等待结果");
try {
//等待1秒得不到结果,就会抛异常
//System.out.println("取得结果=" + future.get(1, TimeUnit.SECONDS));
//也可以不设置时间,一直等
System.out.println("取得结果=" + future.get());
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("程序结束");
}
/**
* 提交一组任务,那个任务先完成,就先返回
*/
public static void main(String[] args) {
ExecutorService threadPool = Executors.newCachedThreadPool();
CompletionService<Integer> service = new ExecutorCompletionService<Integer>(threadPool);
for (int i = 1; i <= 10; i++) {
final int seq = i;
service.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
int time = new Random().nextInt(5000);
Thread.sleep(time);
return seq;
}
});
}
for (int i = 1; i <= 10; i++) {
try {
Future<Integer> future = service.take();
System.out.println(future.get());
} catch (Exception e) {
e.printStackTrace();
}
}
}