zoukankan      html  css  js  c++  java
  • 实现一个简单的方法重试工厂

    源码如下:

     1 package com.sankuai.sos.server.test;
     2 
     3 import org.junit.Test;
     4 import org.slf4j.Logger;
     5 import org.slf4j.LoggerFactory;
     6 
     7 /**
     8  * Created by zhengbin on 2018/7/20
     9  */
    10 public class TryFactory {
    11     private static final Logger LOGGER = LoggerFactory.getLogger(TryFactory.class.getName());
    12 
    13     /**
    14      * 重试
    15      * @param interval  重试间隔
    16      * @param times     重试次数
    17      * @param method    重试执行方法
    18      * @param <R>       重试执行方法返回类型
    19      */
    20     private static <R> R tryTo(Long interval,
    21                               Integer times,
    22                               TryMethod<R> method) {
    23         R result = null;
    24         Integer tryTimes = 0;
    25         try {
    26             while (times > tryTimes && result == null) {
    27                 tryTimes++;
    28                 result = method.getResult();
    29                 if (result == null && tryTimes < times) {
    30                     Thread.sleep(interval);
    31                 }
    32             }
    33             return result;
    34         } catch (Throwable e) {
    35             LOGGER.error("", e);
    36         }
    37         return null;
    38     }
    39 
    40     private interface TryMethod<R> {
    41         R getResult();
    42     }
    43 
    44     @Test
    45     public void test1() {
    46         String s = "zhengbin";
    47         for (int i = 1;i < 4;i++) {
    48             final int fI = i;
    49             String res = TryFactory.tryTo(300L, 3, () -> getStr(s, fI));
    50             System.out.println("try suc,res:"+res);
    51         }
    52     }
    53 
    54     private String getStr(String str, Integer v) {
    55         if (v != 3) {
    56             System.out.println("try param:" + v);
    57             return null;
    58         }
    59         System.out.println("try:suc");
    60         return "result:" + str;
    61     }
    62 }

     输出:

  • 相关阅读:
    Lambda表达式
    多态的实现原理
    泛型
    tomcat
    nginx
    列举cocoa touch 常用框架
    写出你对MVC模式的理解
    写一个委托的interface
    写一个“标准”宏MIN 这个宏输入两个参数并返回较小的一个
    简介Object-C的内存管理
  • 原文地址:https://www.cnblogs.com/zhengbin/p/9340586.html
Copyright © 2011-2022 走看看