futureTask 它的意义在于去除主函数的等待时间,使得主函数在执行耗时操做时无需死等,只须要在将来task执行完毕,再获取结果。java
下面的 futureTask 的一个简单例子。函数
public class RealData implements Callable<String> { protected String data; public RealData(String data) { this.data = data; } public String call() throws Exception { //利用sleep方法来表示真是业务是很是缓慢的 try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } return data; } }
public class Application { public static void main(String[] args) throws Exception { FutureTask<String> futureTask = new FutureTask<String>(new RealData("name")); ExecutorService executor = Executors.newFixedThreadPool(1); //使用线程池 //执行FutureTask,至关于上例中的client.request("name")发送请求 executor.submit(futureTask); //这里能够用一个sleep代替对其余业务逻辑的处理 //在处理这些业务逻辑过程当中,RealData也正在建立,从而充分了利用等待时间 Thread.sleep(2000); //使用真实数据 //若是call()没有执行完成依然会等待 System.out.println("数据=" + futureTask.get()); } }