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