java futureTask的使用

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());
    }
}
相关文章
相关标签/搜索