0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Callable接口介绍 Runnable和Callable的区别

454398 来源:chinaunix 作者:zmy爱吃炸鸡 2020-10-16 11:30 次阅读

Callable接口:

Callable,新启线程的一种方式,返回结果并且可能抛出异常的任务,在前面的新启线程的文章中用过,但是没有具体讲解

优点:

可以获取线程的执行结果,也称为返回值

通过与Future的结合,可以实现利用Future来跟踪异步计算的结果

Runnable和Callable的区别:

Callable规定的方法是call(),Runnable规定的接口是run();

Callable的任务执行后可返回值,而Runnable的任务是不能有返回值的;

call方法可以抛出异常,run方法不可以

运行Callable任务可以拿到一个Future对象,表示异步计算的结果,它提供了检查是否计算完成的方法,以等待计算的完成,并检索计算的结果,通过Future对象可以了解任务执行情况,可以取消任务的执行,还可以获取执行结果

Future接口:

Future是一个接口,代表了一个异步计算的结果,接口中的方法用来检查计算是否完成,等待完成和得到计算结果;

当计算完成后,只能通过get()方法得到结果,get()方法会阻塞,一直到线程的计算结果完成并返回;

如果想取消,那么调用cancel()方法,其他方法用于确定任务是正常完成还是取消了;

一旦计算完成了,那么这个计算就不能被取消

FutureTask类:

FutureTask类实现了RunnableFuture接口,而RunnableFuture接口是继承了Runnable和Future接口,所以说FutureTask是一个提供异步计算结果的任务;

FutureTask可以用来包装Callable或者Runnable接口的实现对象,因为FutureTask实现了Runnable接口,所以FutureTask也可以提交给线程池

Callable,Future,FutureTask三者之间的关系:

Callable的两种执行方式:

1:借助FutureTask,包装Callable接口的实现类,然后传递给Thread线程执行


2:借助线程池来执行


线程池这个只粘贴关键代码,线程池的知识就不在这多说了,之后会具体讲解

返回的Future接口的使用和FutureTask是一样的

这个接口实现的线程,是有返回值的

可以说一下我之前用到的场景

是这样的,我之前用到的一般是用于云上,或者存储服务器下载电子文件,就是本身我一个接口就是需要查询数据库并,进行结果的大量计算和结果转换的,同时还要上云上下载比较大的电子文件,所以我采用Callable配合线程池来完成云上文件的下载;
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 线程池
    +关注

    关注

    0

    文章

    57

    浏览量

    6846
  • 线程
    +关注

    关注

    0

    文章

    504

    浏览量

    19680
收藏 人收藏

    评论

    相关推荐

    C++可调用Callable类型的总结

    自从在使用 std::thread 构造函数过程中遇到了 Callable 类型的概念以来用到了很多关于它的使用。
    发表于 07-17 14:04 379次阅读

    【资料分享】SDIO接口介绍( 有SD和SDIO区别)

    SDIO接口介绍( 有SD和SDIO区别)
    发表于 03-12 11:20

    可调用的VEE服务器,Matlab无法识别

    来回传递数据。我已经使用文件读/写来传递参数。我认为问题在于Matlab而不是Callable VEE,因为VBScript / VBAThanks的建议很好-----原始消息-----来自
    发表于 09-06 13:33

    python用pyserial读取串口错误类型及解决办法

    is not callable没有返回值正确代码:ser = serial.Serial('COM7', 115200, 8, 'N', 1)flag = ser.is_open原因:调用属性is_open时将其视为函数,写成 ser.is_open()。关于is_open的功能及用法,可参见python库
    发表于 01-13 07:12

    TMS320C54x DSP Library(库)

    DSP platform. This source-code library includes C-callable functions (ANSI-C language compatible) for general signal processing math and vec
    发表于 09-06 00:02 26次下载

    多线程并发处理方式

    1. 捕获InterruptedException错误 请检查下面的代码片段: public class Task implements Runnable { private final
    发表于 09-28 15:02 0次下载

    各种标准接口介绍区别

    本文将重点介绍各种标准接口,并揭示它们对不同嵌入式芯片厂商的区别所在。了解基本接口可帮助设计人员优先考虑哪些接口应为片上。另外,虽然标准
    发表于 06-04 03:38 2w次阅读
    各种标准<b class='flag-5'>接口</b><b class='flag-5'>介绍</b>和<b class='flag-5'>区别</b>

    USB接口、串口、并口有何区别

    本文开始介绍了USB接口的工作原理和优点,其次详细的介绍了串口划分标准和并口的区别以及并口的主要特点与分类,最后阐述了USB接口、串口和并口
    发表于 03-26 14:58 9.7w次阅读

    TMS320,c28xDSP中创建可c-callable程序集函数的简单方法

    c-callable程序集需要理解参数传递的约定和环境,这是c编译器期望的。此应用程序报告提供了配置c编译器以帮助解决这些问题的说明和建议。
    发表于 04-11 11:06 3次下载
    TMS320,c28xDSP中创建可c-<b class='flag-5'>callable</b>程序集函数的简单方法

    一文解读DP和HDMI的接口定义及区别分析

    本文首先介绍了DP接口的概念与优势,其次介绍了HDMI优势与选购技巧,最后阐述了DP接口和HDMI的区别以及分析了HDMI和DP
    发表于 04-23 09:19 9.1w次阅读

    端口和接口有什么区别和联系吗

    本文首先介绍了端口的概念、分类及作用,其次介绍接口的概念与显示器接口的类型,最后介绍了端口和接口
    发表于 04-23 16:54 6.2w次阅读
    端口和<b class='flag-5'>接口</b>有什么<b class='flag-5'>区别</b>和联系吗

    像学习编程一样学习深度学习模型开发

    前面介绍的各种基本层,除了可以add进Sequential容器串联之外,它们本身也是callable对象,被调用之后,返回的还是callable对象。所以可以将它们视为函数,通过调用的方式来进行串联。
    的头像 发表于 06-06 09:19 2778次阅读

    DeferredResult异步请求处理 提高系统吞吐量的一把利器

    基础准备 ResponseMsg TaskService 阻塞调用 Callable异步调用 DeferredResult异步调用 后记 大家都知道,Callable和DeferredResult
    的头像 发表于 10-10 16:55 1256次阅读

    C++ invoke与function的区别在哪?

    invoke是C++17标准引入的一个函数模板,用来调用可调用对象(Callable Object,如函数指针、函数对象、成员函数指针等)并返回结果。
    的头像 发表于 09-04 09:11 825次阅读
    C++ invoke与function的<b class='flag-5'>区别</b>在哪?

    java实现多线程的几种方式

    了多种实现多线程的方式,本文将详细介绍以下几种方式: 1.继承Thread类 2.实现Runnable接口 3.Callable和Future 4.线程池 5.Java 8中
    的头像 发表于 03-14 16:55 701次阅读