zoukankan      html  css  js  c++  java
  • 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);
      }

     

  • 相关阅读:
    深入浅出 Redis client/server 交互流程
    VMware三种网络连接模式(转载)
    ARP 原理及攻击
    symbol lookup error:undefined symbol
    printf 颜色格式串"33[34;1m"
    运行openvas
    openvas 安装
    升级openssl 支持TLS1.2
    Windows登录密码明文获取器
    Linux字符串截取和处理命令 cut、printf、awk、sed、sort、wc
  • 原文地址:https://www.cnblogs.com/shenqidu/p/10425615.html
Copyright © 2011-2022 走看看