Future 异步任务
定义Callable接口的实现
import java.util.concurrent.Callable; public class RealDataCallable implements Callable<String> { private String para; public RealDataCallable(String para) { this.para = para; } @Override public String call() throws Exception { StringBuffer sb = new StringBuffer(); for(int i=0; i<10; i++) { sb.append(para); Thread.sleep(1000); } return sb.toString(); } }
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.FutureTask; public class FutureDemo { public static void main(String[] args) throws InterruptedException, ExecutionException { FutureTask<String> future = new FutureTask<String>(new RealDataCallable("a")); ExecutorService es = Executors.newFixedThreadPool(1); //Future 是异步任务,提交请求之后,这里必然是立即返回的,因为程序不会阻塞 //接下来,不用关心数据是如何产生的。 //可以去做一些额外的事情,然后在需要的时候可以通过Future.get()得到实际的数据 es.submit(future); System.out.println("请求完毕"); //使用 sleep 代替其他业务逻辑的处理 Thread.sleep(1000); //获得call()方法的返回值,如果此时call()方法没有执行完成,则会等待 System.out.println("数据: " + future.get()); } }