美文网首页
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

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