美文网首页
2-Callable

2-Callable

作者: 鹏程1995 | 来源:发表于2020-02-11 10:56 被阅读0次

概述

引入

上面我们说了Runnable,因为Runnable无法返回数据,导致使用不便。所以我们此次介绍另一个用来实现将我们的代码封装交给Thread的接口,此接口允许我们返回操作结果。

摘要

介绍Callable接口的定位、使用场景及注意事项。

类介绍

类定位

用于在多线程编程中封装子线程的业务逻辑时使用,不负责创建子线程,只用于在Thread执行时起统一接口作用。

注意

相对于Runnable接口,Callable接口增加了一些东西:

  1. 允许有返回的结果
  2. 允许抛出检查异常

源码解读

没得说。

使用示例

示例

因为Callable有返回值,所以使用Thread是不行的。我们使用FutureTask进行一层适配,因为它同时实现了Future接口和Runnable接口,具体细节我们在后面详述。

/**
 * @author lipengcheng3 Created date 2019-02-13 10:05
 */
public class FutureLearn {
    static class TestCallable implements Callable<Integer> {

        @Override
        public Integer call() throws Exception {
            int sum = 0;
            for (int i = 0; i < 10; i++) {
                Thread.sleep(100);
                sum += i;
            }
            return sum;
        }
    }

    public static void main(String[] args) {
        FutureTask<Integer> t1 = new FutureTask<>(new TestCallable());
        new Thread(t1).start();
        try {
            System.out.println(t1.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}

使用思路

很多多线程框架不支持 Callable 可以借助 RunnableFuture

实现原理解析

问题

扩展

参考文献

相关文章

  • 2-Callable

    概述 引入 上面我们说了Runnable,因为Runnable无法返回数据,导致使用不便。所以我们此次介绍另一个用...

网友评论

      本文标题:2-Callable

      本文链接:https://www.haomeiwen.com/subject/rlgtfhtx.html