java并发编程实践中建议用ScheduledExecutorService来替代Time.scheduleAtFixedRate。把微服务中的定时器的那段代码重构了一下。
需求:3秒请求一次,成功之后取消定时器。
1,Time.scheduleAtFixedRate
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
try {
doSomeThing();
if (trueCondition) {
timer.cancel();
}
}catch(Exception e){
log.warn(e.getMessage(),e);
timer.cancel();
}
}
}, 0, 3000);2,ScheduledExecutorService
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
scheduledExecutorService.scheduleAtFixedRate(() -> {
try {
doSomeThing();
if (trueCondition) {
scheduledExecutorService.shutdown();
}
}catch(Exception e){
log.warn(e.getMessage(),e);
scheduledExecutorService.shutdown();
}
}, 0, 3000, TimeUnit.DAYS.MILLISECONDS);
本文探讨了在Java中如何从使用Time.scheduleAtFixedRate转向ScheduledExecutorService来实现定时任务的执行。内容包括ScheduledExecutorService的优势、使用方法及其在定时任务管理上的灵活性。
394

被折叠的 条评论
为什么被折叠?



