guava-retrying 源码解析(时间限制策略)

一、时间限制策略相关接口和类

  什么是时间限制策略呢?是指在一个时间限制内,包装任何一种重试(尝试)规则,如果超过该限制,那么这个尝试规则可能会被中断,并抛出UncheckedTimeoutException异常。

  重试策略接口 AttemptTimeLimiter<V> ,它只有一个方法:  

1 /**
2  *  callable 受时间限制
3  */
4 V call(Callable<V> callable) throws Exception;

  重试策略工厂类:AttemptTimeLimiters。

    重试策略工厂类是一个普通类,意味着你可以在自己的项目中根据自己的需要进行定制化。在工厂类里定义了两种时间限制策略类。

二、详解两种时间限制策略类

1、NoAttemptTimeLimit : 对代理方法不添加时间限制。(默认策略

  对任何一种尝试策略来讲,都没有时间限制,可以一直尝试下去。

    // 接口的方法实现 
    @Override
    public V call(Callable<V> callable) throws Exception {
        return callable.call();
    }    

2、FixedAttemptTimeLimit<V> :对代理方法的尝试添加固定时间限制。

  这个策略有两个构造方法,如下,该策略可以传入自定义的ExecutorService。其中SimpleTimeLimiter是guava封装的一个类,用于对回调方法施加时间限制。

    

  因此接口的方法实现就调用了SimpleTimeLimiter对象的callWithTimeout方法。

  // 重点看一下最后一个参数:是否通过中止操作和引发InterruptedException来响应线程中断;
  // 如果为false,则允许操作完成或超时,并重新清除当前线程的中断状态;
  // 如果为true,并且我们的线程在执行期间被中断,则抛出InterruptedException异常
  @Override
  public V call(Callable<V> callable) throws Exception {
    return timeLimiter.callWithTimeout(callable, duration, timeUnit, true);
  }

 

 

 

转载于:https://www.cnblogs.com/shenqidu/p/10425615.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值