java 多次循环尝试执行任务,直到成功或次数用完
直接上代码:
public class TaskUtil {
/**
* 多次尝试执行任务,直到成功或次数用完
* @param task 任务
* @param times 循环次数
* @param millisecond 两个任务之间休眠时间(单位:毫秒)
* @param <T>
* @return
*/
public static <T> T foreachTask(Supplier<T> task, int times, long millisecond){
T rs = null;
for (int i = 0; i < times; i++){
rs = task.get();
if(rs instanceof String){
//成功,则中断循环
if(!StringUtils.isEmpty(rs)){
break;
}
}else {
//成功,则中断循环
if(rs != null){
break;
}
}
//不是最后一次 - 需要睡眠
if(i != times - 1){
try {
Thread.sleep(millisecond);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
return rs;
}
}
调用示例:
String rs = TaskUtil.foreachTask(() -> {
// TODO: 2021/4/29
//失败要归还 null 或 ""
//return null;
return "success"
},
3, 1000);

浙公网安备 33010602011771号