说一下 runnable 和 callable 有什么区别(call你)

Runnable和Callable的区别是,(1)Callable规定的方法是call(),Runnable规定的方法是run().(2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值得(3)call方法可以抛出异常,run方法不可以(4)运行Callable任务可以拿到一个Future对象,Future表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的…

大家好,又见面了,我是你们的朋友全栈君。

Runnable和Callable的区别是,

(1)Callable规定的方法是call(),Runnable规定的方法是run().

(2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值得

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

(4)运行Callable任务可以拿到一个Future对象,Future 表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。计算完成后只能使用 get 方法来获取结果,如果线程没有执行完,Future.get()方法可能会阻塞当前线程的执行;如果线程出现异常,Future.get()会throws InterruptedException或者ExecutionException;如果线程已经取消,会跑出CancellationException。取消由cancel 方法来执行。isDone确定任务是正常完成还是被取消了。一旦计算完成,就不能再取消计算。如果为了可取消性而使用 Future 但又不提供可用的结果,则可以声明Future> 形式类型、并返回 null 作为底层任务的结果。Future接口的定义如下:

Future模式

Future模式在请求发生时,会先产生一个Future凭证给发出请求的客户,它的作用就像是Proxy物件,同时,由一个新的执行线程持续进行目标物件的生成(Thread-Per-Message),真正的目标物件生成之后,将之设定至Future之中,而当客户端真正需要目标物件时,目标物件也已经准备好,可以让客户提取使用。

结合JDK的Future来看,就是你run线程后,你可以把线程的返回值赋给Future并返回一个Future对象。这时你可以立即拿到这个对象,然后进行下面的逻辑。但是如果你要get这个Future中的线程结果,就会被阻塞直到线程结束。

就相当于现在的期房,你把手续和钱都交上去了,就可以马上拿到合同,但只有合同没有房子。这个时候你已经是有房一族了,你可以先去买家电买装修(走下面的其他逻辑)。但是你要把家电和装修放进去,就必须等到房子完工(阻塞)。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127421.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java绘图板

    java绘图板

    2021年12月15日
    40
  • 什么是 反向代理

    什么是 反向代理什么是反向代理一 反向代理的定义理解思路 无代理 gt 正向代理 gt 反向代理 无代理 与有代理区别为 主要表现 过滤不同 映射不同 权限不同 过滤 使用代理 可以对外界或内部的 Internet 地址进行过滤 映射 使用代理 多个用户使用代理访问外界时 只映射为一个 IP 地址 权限 使用代理 外界不能直接访问到内部网 同时限制内部网对外部的访问权限 无代理 无以上特征 正向代理 内部网络用户向外网发送请求 正向代理即通常所说的代理 用于代表内部网络用户向 Intern

    2025年11月19日
    3
  • Android angle_android 界面悬停

    Android angle_android 界面悬停最近在研究android游戏引擎Angle,准备纪录下学习心得。我的目的是用它实现UI,给我开发的安卓应用添加一些迷人的效果。初步研究了一下,只要解决下列问题就可以了:1•汉字显示 2•动态更新纹理,比如从网络下载图片,更新显示 3•简单的动画效果 4•与播放器整合 5•实现一些基本控件,如List(文本、图片),Button,Tab,TextView等 6•与非openg

    2022年9月19日
    3
  • 软件测试基础知识 – 集成测试和系统测试的区别,以及它们的应用场景

    软件测试基础知识 – 集成测试和系统测试的区别,以及它们的应用场景分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netDefinitionConverttheinterfaceofaclassintoanotherinterfaceclientsexpect.Adapterletsclassesworktogetherthat…

    2022年6月29日
    36
  • [77]pymongo连接认证 auth failed解决方法

    [77]pymongo连接认证 auth failed解决方法1.查看pymongo版本:结果为3.2piplist-v2.查看mongoDB版本:结果为2.6在mongo终端中输入db.version()mongoDB有不同的认证机制,3.0版本以后采用的是’SCRAM-SHA-1’,之前的版本采用的是’MONGODB-CR’。所以,以我的版本情况,显然应该用’MONGODB-CR’用下面的方法连接,就成功了。…

    2022年7月15日
    14
  • java xor_java 简单xor加密[通俗易懂]

    java xor_java 简单xor加密[通俗易懂]java端加密文件packageenc;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;publicclassEnc{publicvoidencryptFile(){FileInputStreamin=null;FileOutputStreamou…

    2022年7月16日
    18

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号