Future,FutureTask,Callable的一些学习理解

FutureTask

FutureTask 实现了Runnable 和Future接口在FutureTask代码中的发现run方法的主要逻辑就是运行Callable的call方法,然后将保存结果或者异常(用的一个属性result)在通过set()方法把结果返回给类变量outcome
把FutureTask看作一个Future,那么它的作用就是控制Callable的call方法  
的执行过程
总的说就是FutureTask实现了run(),该方法调用了Callable的call方法计算结果,(Callable是FutureTask构造函数传来的)得到计算结果后通过set(Obj)把结果赋给全局变量Outcome作为输出,最后调用get()方法时就会outcome作为返回。
/**
     * 只是一个泡茶得流程,具体过程为在煲水的时候可以异步取来茶叶
     * @param args
     */
    public static void mian(String[] args) throws InterruptedException, ExecutionException {
        //煲水的线程最终会返回一个Water对象
        Callable<Water> waterCallable=new Callable<Water>() {
            @Override
            public Water call() throws Exception {
                return new Water();
            }
        };
        /*FutureTask(本身也是一个Runnable实现了run方法)中传入
         一个waterCallable即为callable在FutureTask的内部中供run()方法使用,该方法调用了 call()所以得到
         了Water(正常时),再通过set()方把water赋给变量outcome(FutureTask的全局变量),最后get()就能返回
        water*/

        FutureTask<Water> waterFutureTask=new FutureTask<Water>(waterCallable);
        new Thread(waterFutureTask).start();
        System.out.println(waterFutureTask.get());
        Thread.sleep(1000);
        Tea1 tea1=new Tea1();
    }
    static class Water{}
    static class Tea1{}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值