Future

Future

Java现在的多线程机制,核心方法run是没有返回值的;如果要得到run方法里面的计算结果,调用mThread.join()保证值返回,必须等待run方法计算完,无论计算过程多么耗时,才会进行下一步。
而Future的核心思想是:分别启动方法去计算几个耗时的操作,不需要等待1计算结果返回才去计算2,等2计算结果返回才去计算3,显然不明智。
·get方法:获取计算结果(如果还没计算完,也是必须等待的)
·cancel方法:还没计算完,可以取消计算过程
·isDone方法:判断是否计算完
·isCancelled方法:判断计算是否被取消

long start = System.currentTimeMillis();
        //买10斤萝卜5秒
        Callable callable1 = new Callable() {

            @Override
            public String call() throws Exception {
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                return "买10斤萝卜";
            }
        };
        FutureTask<String> futureTask1 = new FutureTask<String>(callable1);
        new Thread(futureTask1).start();

        //买2斤猪肉3秒
        Callable callable2 = new Callable() {

            @Override
            public Object call() throws Exception {
                try {
                    Thread.sleep(1000 * 3);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                return "买2斤猪肉";
            }
        };
        FutureTask<String> futureTask2 = new FutureTask<String>(callable2);
        new Thread(futureTask2).start();

        try {
            Log.d(TAG, "init: 5秒" + futureTask1.get());
            Log.d(TAG, "init: 3秒" + futureTask2.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        long end = System.currentTimeMillis();
        Log.d(TAG, "本来需要8秒才能买完菜,使用了FutureTask后的总时间为:" + (end - start));

输出结果:
init: 5秒买10斤萝卜
init: 3秒买2斤猪肉
本来需要8秒才能买完菜,使用了FutureTask后的总时间为:5028

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值