Java5引入了Future接口。对它的理解,就一句话:采用Future接口可以对异步计算进行建模,返回一个指向执行结果的引用,运算结束后,调用可以通过该引用访问执行的结果。
异步调用?那岂不是和Thread差不多?
Future的优势在于,通常你只需要将耗时的操作封装在一个Callable对象中,再将它提交给ExecutorService 直接撸代码,如下:
import java.util.concurrent.*;
public class FutureDemo {
public static void doSomeThingElse(){
System.out.println("此处可以写,正常需要调用的函数");
}
public static void main(String[] args) {
ExecutorService executor = Executors.newCachedThreadPool();
Future<String> future = executor.submit(new Callable<String>() {
@Override
public String call() throws Exception {
return "此处可以调用需要异步调用的方法,然后返回结果";
}
});
doSomeThingElse();
try {
Thread.sleep(3000);
String ss = future.get(2, TimeUnit.SECONDS);
System.out.println("异步调用的函数返回的内容:---"+ss);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
执行的结果如下:
此处可以写,正常需要调用的函数//等待3秒后,打印出下面的输出
异步调用的函数返回的内容:---此处可以调用需要异步调用的方法,然后返回结果
简单的异步编程就完成了。O(∩_∩)O哈哈~