【JAVA】【重试间隔】多线程中两种常见的重试间隔

一、前言

报!! 小南啊,今日有个小任务交给你去办。就是程序中有个数据处理,总是会出错,不知道是什么原因,你去处理一下!

二、主题

围绕数据处理问题去看,从中发现,是因为在多线程中,出现异常处理的时候,一下子就立马重试了,导致频频重试也是出错!一下子重试次数就达到了,导致并没有很好的缓冲效果。因此…

三、重试间隔

原始代码

package com.nan.task;  
  
import lombok.extern.slf4j.Slf4j;  
  
import java.io.IOException;  
  
/**  
* @Author nanfang  
* @Description TODO: Description  
* @Date 2025/5/2 
**/  
@Slf4j  
public class NanTask {  
    // 重试次数  
    private final static int MAX_RETRY = 5;  
    public static void main(String[] args) {  
        // 程序开始  
        log.info("nan task start");  
        int retry = 0;  
        while (retry < MAX_RETRY) {  
            try {  
                // 处理程序,默认会出错报错(抛出异常)  
                process();  
            } catch (Exception e) {  
                log.error("执行定时任务发生异常,准备执行第" + (retry + 1) + "次重试");  
                retry++;  
            }  
        }  
        log.info("nan task end");  
    }  
  
  
  /**  
    * TODO: 进程处理  
    *  
    * @Author nanfang  
    * @Date 2025/5/2  
    **/  
    private static void process() throws IOException {  
        // 抛出异常  
        throw new IOException("nan task error");  
    }  
  
  
}

重试间隔

【相同间隔】
   /**
     * TODO: 时间间隔相同
     *
     * @Author nanfang
     * @Date 2025/5/2
     **/
    private static void sameSleep(int retry, int tiems) throws InterruptedException {
        log.info("same sleep start");
        if (retry > 0) {
            Thread.sleep(tiems);
            log.error("过去了{}秒", tiems);
        }
        log.info("same sleep end");
    }
【递增间隔】
    /**
     * TODO: 时间间隔递增
     *
     * @Author nanfang
     * @Date 2025/5/2
     **/
    private static void progressSleep(int retry) throws InterruptedException {
        log.info("progress sleep start");
        if (retry > 0) {
            // 当第一次重试,休眠 1 秒;第二次,休眠 2 秒;第三次,休眠 3 秒
            int times = retry * 2 * 1000;
            Thread.sleep(times);
            log.error("过去了{}秒", retry * 2);
        }
        log.info("progress sleep end");
    }

四、完整代码

package com.nan.task;  

import lombok.extern.slf4j.Slf4j;

import java.io.IOException;

/**
 * @Author nanfang
 * @Description TODO: Description
 * @Date 2025/4/29
 **/

@Slf4j
public class NanTask {
    // 重试次数
    private final static int MAX_RETRY = 5;

    public static void main(String[] args) {
        // 程序开始
        log.info("nan task start");
        int retry = 0;
        while (retry < MAX_RETRY) {
            try {
                // 相同间隔时间
                // int sleepSameTime = 1;
                // sameSleep(retry, sleepSameTime * 1000);
                // 递增间隔时间
                progressSleep(retry);
                // 处理程序,默认会出错报错(抛出异常)
                process();
            } catch (Exception e) {
                log.error("执行定时任务发生异常,准备执行第" + (retry + 1) + "次重试");
                retry++;
            }
        }
        log.info("nan task end");
    }

    /**
     * TODO: 时间间隔相同
     *
     * @Author nanfang
     * @Date 2025/5/2
     **/
    private static void sameSleep(int retry, int tiems) throws InterruptedException {
        log.info("same sleep start");
        if (retry > 0) {
            Thread.sleep(tiems);
            log.error("过去了{}秒", tiems);
        }
        log.info("same sleep end");
    }

    /**
     * TODO: 时间间隔递增
     *
     * @Author nanfang
     * @Date 2025/5/2
     **/
    private static void progressSleep(int retry) throws InterruptedException {
        log.info("progress sleep start");
        if (retry > 0) {
            // 当第一次重试,休眠 1 秒;第二次,休眠 2 秒;第三次,休眠 3 秒
            int times = retry * 2 * 1000;
            Thread.sleep(times);
            log.error("过去了{}秒", retry * 2);
        }
        log.info("progress sleep end");
    }

    /**
     * TODO: 进程处理
     *
     * @Author nanfang
     * @Date 2025/4/29
     **/
    private static void process() throws IOException {
        // 抛出异常
        throw new IOException("nan task error");
    }


}

五、运行结果

【相同时间间隔】

在这里插入图片描述

【递增时间间隔】

在这里插入图片描述

文章小尾巴

文章写作、模板、文章小尾巴可参考:《写作“小心思”》
  感谢你看到最后,最后再说两点~
  ①如果你持有不同的看法,欢迎你在文章下方进行留言、评论。
  ②如果对你有帮助,或者你认可的话,欢迎给个小点赞,支持一下~
   我是南方者,一个热爱计算机更热爱祖国的南方人。
  (文章内容仅供学习参考,如有侵权,非常抱歉,请立即联系作者删除。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南方者

你的鼓励将驱动我的开源

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值