FutureTask任务的结果只有当任务完成后才能获取,并且只能通过get系列方法获取,当结果还没 出来时,线程get系列方法会被阻塞,另外,一旦任务被执行完成,任务不能重启,除非有哪些时间使用了runAndReset方法。
代码如下:
public class AsyncFurureExample {
public static void main(String[] args) throws ExecutionException, InterruptedException {
long start = System.currentTimeMillis();
//创建future任务
FutureTask<String> futureTask = new FutureTask<>(() -> {
String result = null;
try {
result = doSomethingA();
} catch (Exception e) {
e.printStackTrace();
}
return result;
});
//2.开启异步单元执行
Thread thread = new Thread(futureTask,"threadA");
thread.start();
//执行任务B
String s = doSomethingB();
//同步等待线程A结束
String s1 = futureTask.get();
System.out.println("执行A所得:"+s1+", 执行B所得:"+s);
//打印两个得时间
System.out.println(System.currentTimeMillis()-start);
}
public static String doSomethingA(){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("-------doSomethingA--------");
return "A";
}
public static String doSomethingB(){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("----------doSomethingB------------");
return "B";
}
}