美文网首页
Callable接口及FutureTask类简单学习

Callable接口及FutureTask类简单学习

作者: eawarfs | 来源:发表于2020-03-17 01:09 被阅读0次

    1、Callable接口是什么?

            是java.util.concurrent包下的一个函数式接口,用来创建线程的。返回结果是一个任务,并可能抛出异常。

    2、Callable接口和Runnable的区别呢?

        Callable可以有返回值,可以抛出异常,而Runnable正好相反

        Callable方法时call,而Runnable方法时run

    3、FutureTask类

        api文档翻译如下:

         一个可以取消的异步计算的类。这个类提供了 Future基实现,用的方法启动和取消计算,查询是否计算完成,并检索结果。结果只能检索时,计算已完成的 get方法将阻塞;如果计算尚未完成。一旦计算完成,计算不能重新启动或取消(除非计算时使用 runAndReset())。

        一个FutureTask可以用来包装Callable或Runnable对象。因为FutureTask实现Runnable,一FutureTask可以提交执行Executor。

    异步调用,来处理一件比较消耗资源的方法,比如4个同学,A算1+20,B算21+30,C算31*到40,D算41+50,是不是C的计算量有点大啊,那么开一个线程去计算C同学的任务,然后等A/B/C 计算完成时再查询是否计算完成。这样的好处不会阻塞。

    当主线程需要执行比较耗时的操作时,但又不想阻塞主线程,可以创建一个线程去执行这个操作在后台完成,当主线程需要这个线程运行的结果或执行状态时,再去获取。

    一般FutureTask比较耗时,主线程完成自己的任务或需要时再去获取。计算结果仅仅在计算完成时返回,若线程获取时没有计算完成,主线程会一直等待该线程计算完成。该计算一旦完成就不会再次执行。

    相关文章

      网友评论

          本文标题:Callable接口及FutureTask类简单学习

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