java J.U.C中FutureTask的使用分析


本篇文章给大家分享的是有关java J.U.C中FutureTask的使用分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。FutureTask是J.U.C里面的,但是它不是AQS的子类,但是这个类对线程结果的处理很值得我们学习和在项目中使用。创建一个线程通常有两种方式,一种是直接继承Thread、另一种是直接实现Runnable,这两种方式有一个共同的缺陷就是在执行完任务之后无法获取执行结果。从java1.5开始就提供了Callable和Future,通过他们可以在任务完成之后得到任务的执行结果。Runnable接口代码简单,只有一个方法run()Callable是一个泛型接口,有一个call函数,call的返回类型就是创建Callable的类型,功能更强大一些。对于一个具体的Callable和Runnable任务,Future可以进行取消、查询一个任务是否被取消、查询是否完成、获取结果等等。通常线程都是异步执行的,因此不可能从其他线程中得到返回值。Future可以监视目标线程call的情况,当调用Future的get()时就可以获得它的结果,这时线程可能不会直接完成,当前线程开始阻塞,直到call方法结束并返回结果,线程才继续执行。总结一句话,Future可以得 香港云主机到其他线程任务方法的结果返回值。FutureTask类的父类是RunnableFuture,而RunnableFuture继承了Runnable和Future两个接口。由此可以知道FutureTask最终也是执行Callable类型的任务。如果构造函数参数是Runnable的话,会自动转换成Callable类型。FutureTask实现了两个接口(Runnable和Future),所以它既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值。RunnableFuture继承了Runnable接口和Future接口,而FutureTask实现了RunnableFuture接口。那么,这个组合的使用有什么好处呢?假设有一个很费时的逻辑,需要计算并返回计算结果,同时这个值不是马上需要,那么就可以使用这个组合,用另外一个线程去计算返回值,而当前线程在使用这个返回值之前可以做其他操作,等到需要这个返回值时可以通过Future得到。以上就是java J.U.C中FutureTask的使用分析,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注开发云行业资讯频道。

相关推荐: vue中怎么引入moment

本文小编为大家详细介绍“vue中怎么引入moment”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue中怎么引入moment”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。具体步骤如下:1.首先,在vue-cli中创建一个vue.…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 08/13 12:43
Next 08/13 12:43

相关推荐