Future使用Demo

Future的使用场景:将计算或IO异步化,提高程序并行度。
public class FutureTaskTest{

    public static void main(String[] args) {
        //计算模块
        Callable<Integer> eval = new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                Thread.sleep(3000);
                return -1;
            }
        };

        //方式一:通过FutureTask来使用Future
        FutureTask<Integer> ft = new FutureTask<>(eval);

        Thread t = new Thread(){
            public void run() {
                try {
                    System.out.println("t1 Before");
                    //需要手动调用run方法
                    ft.run();
                    System.out.println("t1 result " + ft.get());
                    System.out.println("t1 After");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };
        t.start();

        //方式二:通过ExecutorService框架来使用Future
        ExecutorService executorService = Executors.newFixedThreadPool(2);
        //ExecutorService框架会调用run方法,只需submit提交任务
        Future<Integer> efr = executorService.submit(eval);
        Thread t2 = new Thread(){
            public void run(){
                try {
                    System.out.println("t2 Before");
                    System.out.println("t2 result " + efr.get(1000, TimeUnit.MILLISECONDS));
                    System.out.println("t2 After");
                } catch(Exception e){
                    e.printStackTrace();
                }
            }
        };
        executorService.submit(t2);
    }
}

猜你喜欢

转载自blog.csdn.net/Wengzhengcun/article/details/87293103