Callable和Future出现的原因

创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 
这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 
如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。

而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。

Callable和Future介绍

Callable接口代表一段可以调用并返回结果的代码;Future接口表示异步任务,是还没有完成的任务给出的未来结果。所以说Callable用于产生结果,Future用于获取结果。

Callable接口使用泛型去定义它的返回类型。Executors类提供了一些有用的方法在线程池中执行Callable内的任务。由于Callable任务是并行的(并行就是整体看上去是并行的,其实在某个时间点只有一个线程在执行),我们必须等待它返回的结果。 
java.util.concurrent.Future对象为我们解决了这个问题。在线程池提交Callable任务后返回了一个Future对象,使用它可以知道Callable任务的状态和得到Callable返回的执行结果。Future提供了get()方法让我们可以等待Callable结束并获取它的执行结果。

Callable与Runnable

java.lang.Runnable吧,它是一个接口,在它里面只声明了一个run()方法:

public interface Runnable {public abstract void run();
}

  由于run()方法返回值为void类型

Java多线程Callable接口相关推荐

  1. Java多线程 - Runnable接口和Callable接口的区别

    文章目录 1. Runnable接口实例 2. Callable接口原理 3. Callnable接口实例 4. FutureTask是什么? 5. 线程池中 submit() 和 execute() ...

  2. java的Callable接口

    java也算是原生的支持多线程吧,但是如何让线程执行完成之后能够有返回值返回到主线程呢...? 一般情况下线程是实现runable接口,但是如果想要返回值的话那么就应该实现Callable接口了... ...

  3. Java多线程-Callable和Future

    Callable和Future出现的原因 创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果. 如果需 ...

  4. 实现多线程Callable接口

    Callable接口,实现多线程  1.实现 Callable接口,相较于实现 Runnable 接口的方式,优点是:方法可以有返回值,并且可以抛出异常  2.需要 FutureTask实现类的支持, ...

  5. 多线程-Callable接口

    通过实现Callable接口实现多线程. 环境:IntelliJ IDEA.JDK1.8 步骤 自定义类,实现Callable接口,需要返回值(call方法) 实现call()方法,编写线程执行体(可 ...

  6. 【Java】Callable 接口

    多线程中最常用的是Runnable接口,定义了一次任务执行的内容.但是Runnable接口无法得到返回值,而且也无法让执行端捕获到异常.所以就有了Callable接口. public interfac ...

  7. Java用Callable接口创建线程

     一.概述  使用Callable接口创建线程能够返回数据.与Runnable接口创建线程的方式有点类似,也是需要通过Thread类来创建线程.由于Thread类的构造函数中没有Callable接口, ...

  8. 从源码角度详解Java的Callable接口

    摘要:本文从源码角度深入解析Callable接口. 本文分享自华为云社区<深入解析Callable接口>,作者: 冰 河 . 本文纯干货,从源码角度深入解析Callable接口,希望大家踏 ...

  9. Java多线程实现接口调用

    前言 有一张客户信息表,数据量很大.需要把这些记录调用某个接口(这个接口一次只能查询10个客户信息),然后把接口返回信息解析保存到另一个表里. 客户信息表(cust_info)如下: id cust_ ...

最新文章

  1. Linux Supervisor的安装与使用入门
  2. 表单向导 css实现 步骤指引器
  3. oracle误删数据的解决方法
  4. android actionbar 背景,Android应用开发之定制页面背景及Actionbar overflow menu的背景色...
  5. 2020年周数和日期对应表_2020年雅思考试报名截止日期、准考证打印日期和成绩单寄送日期...
  6. rubymine 保存成unix格式_如何免费在线试用 200+ Linux 和 Unix 发行版?
  7. 都啥年代了,求你别再说Redis是单线程了!
  8. [Python] Marshmallow QuickStart
  9. k8s极简史:K8s多集群技术发展的历史、现状与未来
  10. MySQL高级-SQL优化
  11. java 线程_理解java多线程
  12. 【转】:localStorage使用总结
  13. Linux编译工具:gcc入门
  14. 联想笔记本prtsc不能截图_联想笔记本电脑如何截屏,你值得一看的技巧
  15. Word排版技巧分享
  16. Android 使用百度飞桨做OCR的本地识别
  17. Symbian OS应用编程图形篇之架构
  18. es - elasticsearch - aggs - pipeline - moving_avg
  19. oracle 表的er图,用PowerDesingner把oracle中的表导成er图
  20. 关于数列极限的两个定理

热门文章

  1. 夜遇歹人来不及报警怎么办?让求救app帮助你
  2. CDS学习(一)---简介
  3. python编写一个程序、判断用户输入的数是正数还是负数_java试编写一程序,可由键盘输入一个整数,然后判断该数值是正数还是负数.(if)...
  4. linux设备驱动那点事儿之SD卡驱动理论篇
  5. 永中科技破产清算中的疑问
  6. 【计算机毕业设计】50.课程设计管理系统
  7. 2019中国开源年会总结
  8. 【Excel设置任意列为默认文本格式】
  9. RHEL 7特性说明(八):联网与认证
  10. 自定义404页面并打包docker部署项目