Guava库学习:学习Concurrency(七)FutureFallback

    链接地址:http://www.xx566.com/detail/162.html

    上一篇,Guava库学习:学习Concurrency(六)AsyncFunction中, 我们简单觉得介绍了AsyncFuction接口,AsyncFuction接口是Function接口的异步表现,可以被用来异步的执行转换,不过常被 用来返回ListenableFuture实例,本篇我们继续Guava Concurrency的学习:Concurrency(七)FutureFallback。

    

    Guava官方这样定义FutureFallback接口:Provides a backup Future to replace an earlier failed Future。提供一个Future的备用来替代之前失败的Future;Getting Started With Google Guava中这样解释:The FutureFallback interface is used as a backup or a default value for a Future instance that has failed。在Future实例失败后常被用来作为Future的备份或者默认的值。

 

    翻开FutureFallback的源码,我们看到FutureFallback接口只提供了一个方法: ListenableFuture<V> create(Throwable t),通过接收一个Throwable 实例,我们可以决定是尝试恢复失败的Future,返回默认的Future,或者传播这个异常。来看下面的代码示 例:

class FutureFallbackImpl implements FutureFallback<String> {
    @Override
    public ListenableFuture<String> create(Throwable t) throws
            Exception {
        if (t instanceof FileNotFoundException) {
            SettableFuture<String> settableFuture =
                    SettableFuture.create();
            settableFuture.set("Not Found");
            return settableFuture;
        }
        throw new Exception(t);
    }
}

    接下来简单的解释一下上面的示例:假设我们试图异步的检索文件的名称,但是没有找到,不过没有关系,我们首先判断了异常的类型,当捕获到找不到文件的异常 时,我们通过SettableFuture构造了一个Future对象,并且将其值设置为“Not Found”,然后将其返回,如果是其他的异常,我们可以继续传播此异常。

 

    更多SettableFuture,请参阅Guava库学习:学习Concurrency(五)SettableFuture

 

    总结:在之前Guava库学习:学习Concurrency(四)FutureCallback中,我们学习了FutureCallback,用于处理Future成功或失败后的回调函数,本篇所学习的FutureFallback则被用作Future失败后的“备胎”,两者的英文拼写非常的相似,但是使用的地方以及作用有很大的不同,需要特别区分开来。

 

    示例代码地址:http://git.oschina.net/realfighter/xx566-diary/blob/master/src/guava/FutureFallbackTest.java

转载于:https://my.oschina.net/realfighter/blog/349945

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值