Callable与Future

本文详细介绍了Java中Callable和Future的概念与使用,包括它们与Runnable的区别、FutureTask的内部状态及其转换、get和cancel方法的行为。文章指出,Callable适用于需要线程返回结果和抛出异常的情况,而Future则用于保存异步任务的结果,允许添加回调并在任务完成时执行。FutureTask结合了Runnable和Future的功能,可以方便地与Executor一起使用。
摘要由CSDN通过智能技术生成

Runnable封装了一个异步运行的任务,只有一个没有参数和返回值的run方法,同时也不能抛出异常;Callable与其类似,只有一个call方法,但是它有参数和返回值,还能抛出异常,Callable可以看作是Runnable的加强版。

Runnable和Callable的定义如下:

在这里插入图片描述

在这里插入图片描述

从中可以看到:
1、 Callable能接受一个泛型,然后在call方法中返回一个这个类型的值,例如Callable<Integer>表示一个最终返回Integer对象的异步计算。而Runnable的run方法没有返回值。
2、 Callable的call方法可以抛出异常,而Runnable的run方法不会抛出异常。

适合用Callable的情况

1、 需要线程返回结果

当一个线程需要另外一个比较耗时的线程的运算结果的时候,如果我们用Runnable实现线程的话,就需要使用共享变量和线程间的通信来完成,同时还需要等待线程执行完毕,可见就相对复杂且效率低。

2、 需要线程抛出异常

我们在使用Runnable执行一些可能会抛出异常的任务的时候,都只能在run方法内部进行异常的捕获,而不能抛给上一级调用者进行异常的处理,这也造成了极大的不便。

由于Runnable的局限性,在以上两种情况的时候,使用Callable都拥有较高的效率。

Future

Callable线程允许返回值,由于线程是异步执行的,所以我们就需要一个数据结构来保存异步任务的结果,这个数据结构就是Future。

Future表示一个可能还没有完成的异步任务的结果,针对这个结果,可以添加Callback以便在任务执行成功或失败后作出相应的操作。

Future接口提供了五个方法:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值