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

猜你喜欢

转载自blog.csdn.net/qq_39507260/article/details/83958460