ScheduledExecutorService service = Executors.newScheduledThreadPool(10);
service.scheduleAtFixedRate(() -> {
LocalDateTime start = LocalDateTime.now().withNano(0).minusSeconds(1);
LocalDateTime end = LocalDateTime.now().withNano(0);
List<String> strings=null;
for (int index = 0; index < GET_RETRY_TIMES; index++) {
try {
事件處理
} catch (Exception e) {
System.out.println("shibai%d" + start + end);
logger.error(String.format("獲取信息失敗 開始時間:[%s], 結束時間:[%s]", start.toString(), end.toString()));
}
}
for (int index = 0; index < SET_RETRY_TIMES; index++) {
try {
queueService.orderMsetMessage(strings);
break;
} catch (Exception e) {
System.out.println(start.toString()+end.toString());
logger.error(String.format("寫入數據失敗 開始時間:[%s], 結束時間:[%s]", start.toString(), end.toString()));
}
}
}, 0, 1, TimeUnit.SECONDS);
在java中,Timer類主要用於定時性、周期性任務 的觸發,這個類中有兩個方法比較難理解,那就是schedule和scheduleAtFixedRate方法,在這里就用實例分析一下
(1)schedule方法:“fixed-delay”;如果第一次執行時間被delay了,隨后的執行時間按 照 上一次 實際執行完成的時間點 進行計算
(2)scheduleAtFixedRate方法:“fixed-rate”;如果第一次執行時間被delay了,隨后的執行時間按照 上一次開始的時間點 進行計算,並且為了”catch up”會多次執行任務,TimerTask中的執行體需要考慮同步