说一下 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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • windows10查看硬盘是不是ssd_win10怎么看硬盘是不是固态

    windows10查看硬盘是不是ssd_win10怎么看硬盘是不是固态转自:http://www.w10zj.com/Win10xy/Win10yh_7732.html如何判断是否是ssd硬盘?在win10操作系统中我们该如何查看当前主机中安装的是固态硬盘还是机械硬盘

    2022年8月3日
    6
  • # 创业计划书-样例参考五千套(二)

    # 创业计划书-样例参考五千套(二)创业计划书-某地广电综合信息网方案创业计划书-某电广传媒股份有限公司2204年年度报告创业计划书-某地轻工业调查报告创业计划书-某电信公司某城市分公司网站建设策划方案创业计划书-某电子报税系统项目建议书创业计划书-某电子科技公司商业计划书创业计划书-某冬枣项目商业计划书创业计划书-某度假村策略思考及广告执行计划创业计划书-某段堤防工程可行性研究报告创业计划书-某多媒体搜索技术商业计划书创业计划书-某儿童购物网商业计划书创业计划书-某发电公司事故处理与调查管理标准创业计划书-某房地产开

    2022年4月30日
    67
  • Windows Mobile 6.0 SDK和中文模拟器下载

    Windows Mobile 6.0 SDK和中文模拟器下载

    2021年12月14日
    42
  • Enterprise Library5.0 配置Log时差问题

    Enterprise Library5.0 配置Log时差问题最近使用EnterpriseLibrary5.0配置Log日志时候出现的默认时间与本地系统时间不一致。默认时间为格里尼治时间,在一个log中出现两个时间会让人迷惑,这个事件到底是什么时候发生的呢?经过小弟我一上午多次尝试后,总算是解决了这个问题。解决方法:在LogMessageFormatters->Template->将Timestamp:{timestamp}{newline}

    2022年10月20日
    1
  • Nginx/Apache 和Apache Tomcat 的区别

    Nginx/Apache 和Apache Tomcat 的区别参考文献:https://www.kancloud.cn/hx78/java-web/335879Nginx/Apache和ApacheTomcat的区别 一、Nginx/Apache是WebServer,而ApacheTomact是一个servletcontainer想请教下,具体区别呢?因为如果使用了ApacheTomact的话已经具备响应httpreques…

    2022年6月9日
    38
  • linux添加防火墙规则_linux如何查看防火墙状态

    linux添加防火墙规则_linux如何查看防火墙状态linux防火墙对于我们来说是非常重要的!那么我们要怎么样去配置呢?下面由学习啦小编给你做出详细的linux防火墙配置方法介绍!希望对你有帮助!linux防火墙配置方法一:1./sbin/iptables-AINPUT-ptcp–dport80-jACCEPT2./sbin/iptables-AINPUT-ptcp–dport25-jACCEPT3.ech…

    2022年9月15日
    2

发表回复

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

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