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


相关推荐

  • linux系统查看版本命令,Linux系统查看系统版本命令[通俗易懂]

    linux系统查看版本命令,Linux系统查看系统版本命令[通俗易懂]以下操作在centos系统上实现,有些方式可能只适用centos/redhat版本系统uname-a|uname-r查看内核版本信息[root@node1~]#uname-aLinuxnode12.6.32-573.el6.x86_64#1SMPThuJul2315:44:03UTC2015x86_64x86_64x86_64GNU/Linux[root@n…

    2022年8月21日
    11
  • pycharm安装配置教程_python安装pycharm的方法

    pycharm安装配置教程_python安装pycharm的方法TOC关于pycharm的下载安装以及环境的配置过程(python语言编辑器)下面是pycharm的链接:https://pan.baidu.com/s/1SFHWnGsRsC1XxCG8pQfrlw提取码:zj4h复制这段内容后打开百度网盘手机App,操作更方便哦!或者百度搜索后直接下载:一:安装过程:1、进入安装界面,直接点next进入下一个界面。2、记好此时的安装位置,点n…

    2022年8月29日
    0
  • wing是什么_124个叶结点的完全二叉树

    wing是什么_124个叶结点的完全二叉树设一个 n 个节点的二叉树 tree 的中序遍历为(1,2,3,…,n),其中数字 1,2,3,…,n 为节点编号。每个节点都有一个分数(均为正整数),记第 i 个节点的分数为 di,tree 及它的每个子树都有一个加分,任一棵子树 subtree(也包含 tree 本身)的加分计算方法如下:subtree的左子树的加分 × subtree的右子树的加分 + subtree的根的分数若某个子树为空,规定其加分为 1。叶子的加分就是叶节点本身的分数,不考虑它的空子树。试求一棵符合中序遍历为(1,2,

    2022年8月9日
    4
  • Printwriter对象「建议收藏」

    Printwriter对象「建议收藏」在servlet处理请求后,需要返回一些数据给浏览器客户端。这时候就需要用到PrintWriter对象用来写数据。一般的使用方法是:首先获得PrinterWriter内置对象,然后将内容写入PrinterWriterout;out=response.getWriter();out.println(“”);out.println(title);out.print

    2022年8月10日
    4
  • map改变一个字母是什么_组合总和 leetcode

    map改变一个字母是什么_组合总和 leetcode原题链接给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出:[ [“ate”,”eat”,”tea”], [“nat”,”tan”], [“bat”]]说明:所有输入均为小写字母。不考虑答案输出的顺序。tclass Solution {public: vector<vector<string>> g

    2022年8月8日
    2
  • python spark教程菜鸟教程_菜鸟教程hadoop-hadoop入门教程「建议收藏」

    python spark教程菜鸟教程_菜鸟教程hadoop-hadoop入门教程「建议收藏」菜鸟教程hadoop-hadoop入门教程菜鸟教程hadoop-本站旨在为从事大数据行业或学习hadoop技术人员提供一个交流学习平台,全面收集了在大数据时代的互联网巨头企业的hadoop入门教程精华技术文章Lastly,wevariedthenumberofnodesbetween10and200withstepsize10.Meanwhile,thenumb…

    2022年5月26日
    52

发表回复

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

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