java实现间隔时间重试

很多时候,在做交易回查时候并不是每隔一个固定时间就做一次查询,而是希望能够n次幂的方式执行某些任务

例如:1秒、2秒、4秒、8秒

/**
 * 重试工具类
 */
public class RetryUtil {

    /**
     * 比较两个时间差是否满足重试条件
     * 
     * <pre>
     *     公式为:当前时间 - 创建时间 >= 2的n次幂 * 间隔秒因子
     *     <li>当前时间从ThreadLocal中获取传入</li>
     *     <li>n次幂由重试次数决定</li>
     *     <li>间隔秒因子由系统配置,如30s、60s等</li>
     * </pre>
     * 
     * @param currentTime       当前时间
     * @param gmtProcess        推进时间(发起网关提现或充值的时间)
     * @param retryCount        重试次数
     * @param intervalSec       间隔秒因子
     * @return
     */
    public static boolean ifRetry(Date currentTime, Date gmtProcess, int retryCount, int intervalSec) {
        //【2】获取时间差
        long offsetSec = DateUtils.getDiffSeconds(currentTime, gmtProcess);

        //【3】得到2的n次幂
        long power = new Double(Math.pow(2, retryCount)).longValue();

        //【4】返回是否满足重试条件
        return offsetSec >= power * intervalSec;
    }
    /**
     * 取得两个日期间隔秒数(日期1-日期2)
     * 
     * @param one
     *            日期1
     * @param two
     *            日期2
     * 
     * @return 间隔秒数
     */
    public static long getDiffSeconds(Date one, Date two) {
        Calendar sysDate = new GregorianCalendar();


        sysDate.setTime(one);


        Calendar failDate = new GregorianCalendar();


        failDate.setTime(two);
        return (sysDate.getTimeInMillis() - failDate.getTimeInMillis()) / 1000;
    }
}

发布了20 篇原创文章 · 获赞 23 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/hdu09075340/article/details/79494859