码迷,mamicode.com
首页 > 编程语言 > 详细

Java Callable,Runnable比较及用法

时间:2017-01-17 15:16:36      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:family   read   call()   抛出异常   对象   err   需要   异常   exception   

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

Java Callable,Runnable比较及用法

标签:family   read   call()   抛出异常   对象   err   需要   异常   exception   

原文地址:http://www.cnblogs.com/zeze/p/6293104.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!