Guava并发(2)——ListenableFuture\FutureCallback\SettableFuture\Futures

本文详细介绍了Guava中的ListenableFuture、FutureCallback、SettableFuture等概念,阐述了如何利用它们进行异步处理。ListenableFuture允许注册回调,任务完成后自动调用。FutureCallback提供了成功和失败的处理方法。SettableFuture则允许预先设定返回值。此外,还讲解了AsyncFunction接口用于异步转换,FutureFallback用于异常恢复,以及Futures工具类的实用方法。最后提到了RateLimiter,它是限制资源访问速率的工具。
摘要由CSDN通过智能技术生成

ListenableFuture类

  • jdk5之后有了Future这种异步执行的结构
ExecutorService executor = Executors.newCachedThreadPool();
   Future<Integer> future = executor.submit(new Callable<Integer>(){
                                public Integer call() throws Exception{
                                   return service.getCount();
} });
//Retrieve the value of computation
Integer count = future.get();

  • ListenableFuture对Future进行了扩展,允许注册一个回调函数,task执行完后自动调用。
  • 获取ListableFuture对象。

正如我们获取Future对象要通过ExecutorService.submit(Callable)来获取一样,我们可以这样创建ListenableFuture对象:

?
executorService = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(NUM_THREADS)); //包装Executors创建的线程池
ListenableFuture<String> listenableFuture = executorService.submit( new Callable<String>()...); //获取ListableFuture对象
listenableFuture.addListener( new Runnable() {
       @Override
       public void run() {
           methodToRunOnFutureTaskCompletion();
       }
}, executorService); //注册回调函数

FutureCallback类

  • FutureCallback定义了onSuccessonFailure方法,onSuccess方法会接收一个Future对象,这样我们就可以获取Future的结果。
  • 首先需要一个FutureCallback实现类。
?
/**
  * 定义一个FutureCallBack实现类
  */
public class FutureCallbackImpl implements FutureCallback<String> {
     private StringBuilder builder = new StringBuilder();
 
 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值