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;
    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值