java的定時輪詢



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中的執行體需要考慮同步


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM