futureTask 它的意义在于去除主函数的等待时间,使得主函数在执行耗时操作时无需死等,只需要在未来task执行完毕,再获取结果。

 

下面的 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());
    }
}

  

posted on 2017-10-10 16:02  知己一生  阅读(663)  评论(1编辑  收藏  举报