色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

java - 定時任務TimerTask沒有被全部成功執行

瀏覽:142日期:2023-10-22 17:15:22

問題描述

我這建立了一個TimerManager的類,目的是讓系統跑起來之后,執行相應的4個任務。但是,4個任務之中只有兩個被成功執行了,他們分別是timer和timer3,后面的兩個timer2和timer4并沒有被執行到。百思不得其解,所以來sf讓各位幫我看看是什么問題,下面是TimerManager的代碼:

public class TimerManager { @Resource RemoteControlController remoteControlController;@Resource ManagementStationService managementStationService; @Resource ControllerStatusController controllerStatusController; // 時間間隔 private static final long PERIOD_DAY = 24 * 60 * 60 * 1000; public static final long PERIOD_DAY2 = 60 * 60 * 1000; private static final long PERIOD_DAY3 = 60 * 60 * 1000; private static final int START_TIME = 1; private static final int START_TIME2 = 0; private Logger log = Logger.getLogger('ServerInfo'); public void initTimerManager() {Calendar calendar = Calendar.getInstance();Calendar calendar2 = Calendar.getInstance();/*** 定制每日1:00執行方法 ***/calendar.set(Calendar.HOUR_OF_DAY, START_TIME);calendar.set(Calendar.MINUTE, 0);calendar.set(Calendar.SECOND, 0);/*** 定制每日0:00執行方法 ***/calendar2.set(Calendar.HOUR_OF_DAY, START_TIME2);calendar2.set(Calendar.MINUTE, 0);calendar2.set(Calendar.SECOND, 0);Date date = calendar.getTime(); //第一次執行定時任務的時間 ,date重啟不執行Date date2 = calendar.getTime();//date2、3重啟執行Date date3 = calendar2.getTime();// 如果第一次執行定時任務的時間 小于 當前的時間// 此時要在第一次執行定時任務的時間加一天,以便此任務在下個時間點執行。如果不加一天,任務會立即執行。if (date.before(new Date())) { date = this.addDay(date, 1);}Timer timer = new Timer();Timer timer2 = new Timer();Timer timer3 = new Timer();Timer timer4 = new Timer();UpdateDailyEletricPowerTimerTask task = new UpdateDailyEletricPowerTimerTask();UpdateLampStatusTimerTask task2 = new UpdateLampStatusTimerTask();UpdateCurrentEletricDataTimerTask task3 = new UpdateCurrentEletricDataTimerTask();UpdateCurrentControllerStatusTimerTask task4 = new UpdateCurrentControllerStatusTimerTask();// 安排指定的任務在指定的時間開始進行重復的固定延遲執行。timer.schedule(task, date, PERIOD_DAY);timer3.schedule(task3, date3, PERIOD_DAY2);timer4.schedule(task4, date3, PERIOD_DAY3);//先更新路由狀態timer2.schedule(task2, date2, PERIOD_DAY);//再更新燈狀態 } // 增加或減少天數 public Date addDay(Date date, int num) {Calendar startDT = Calendar.getInstance();startDT.setTime(date);startDT.add(Calendar.DAY_OF_MONTH, num);return startDT.getTime(); }public class UpdateCurrentEletricDataTimerTask extends TimerTask {@Overridepublic void run() { try {// 在這里寫你要執行的內容/** * 查詢實時功率等數據 */log.info('-------------UpdateCurrentEletricDataTimerTask正在執行--------------');remoteControlController.currentElectricDataCollecting();log.info('-------------UpdateCurrentEletricDataTimerTask執行完畢--------------'); } catch (Exception e) {log.info('-------------UpdateCurrentEletricDataTimerTask解析信息發生異常--------------'); }} }

public class UpdateCurrentControllerStatusTimerTask extends TimerTask {@Overridepublic void run() { try {// 在這里寫你要執行的內容/** * 查詢實時功率等數據 */log.info('-------------UpdateCurrentControllerStatusTimerTask正在執行--------------');remoteControlController.readRouterStatus();log.info('-------------UpdateCurrentControllerStatusTimerTask執行完畢--------------'); } catch (Exception e) {log.info('-------------UpdateCurrentControllerStatusTimerTask解析信息發生異常--------------'); }} }public class UpdateDailyEletricPowerTimerTask extends TimerTask {@Overridepublic void run() { try {// 在這里寫你要執行的內容/** * 查詢前昨兩天日凍結正向有功總電量 */log.info('-------------UpdateDailyEletricPowerTimerTask正在執行--------------');remoteControlController.dailyPositiveElectricPowerCollecting();log.info('-------------UpdateDailyEletricPowerTimerTask執行完畢--------------'); } catch (Exception e) {log.info('-------------UpdateDailyEletricPowerTimerTask解析信息發生異常--------------'); }} }public class UpdateLampStatusTimerTask extends TimerTask {@Overridepublic void run() { try {// 在這里寫你要執行的內容/** * 更新全部燈具狀態 */log.info('-------------UpdateLampStatusTimerTask正在執行--------------');List<ManagementStation> mlist = managementStationService.getManagementStationList();int msize = mlist.size();log.info('**********UpdateLampStatusTimerTask獲取的管理所長度為'+msize);if(msize > 0){ String[] arr = new String[msize]; for(int i = 0; i < msize; i++)arr[i] = String.valueOf(mlist.get(i).getMid()); boolean realTime = false; controllerStatusController.UpdateControllerStatus(arr,realTime);}log.info('-------------UpdateLampStatusTimerTask執行完畢-------------'); } catch (Exception e) {log.info('-------------UpdateLampStatusTimerTask解析信息發生異常--------------'); }} }}

問題解答

回答1:

我沒用過 Timer,也不打算對如何調試這個程序提建議。我建議用 quartz 這樣的成熟框架來做這類事情。如果一定要自己設計的話,Timer 也不是最好的選擇,標準的思路應該是:

創建一個守護線程,管理每個定時任務的周期;

當一個定時任務執行時間到了,守護線程另開一個線程執行這個任務;

如果一個任務執行時間超過周期,則推遲下次執行時間到下一個周期。

標簽: java
相關文章:
主站蜘蛛池模板: 国产精品一级香蕉一区 | 日韩一级在线 | 亚洲国产最新在线一区二区 | 永久网站色视频在线观看免费 | 亚欧色视频在线观看免费 | 日韩成人免费一级毛片 | 男女午夜爱爱久久无遮挡 | 亚洲国产精品一区二区九九 | 欧美真人毛片动作视频 | 在线观看中文字幕亚洲 | 91色综合综合热五月激情 | 成人全黄三级视频在线观看 | 国产上床视频 | 香蕉久久夜色精品国产尤物 | 国产成人免费午夜性视频 | 国产美女精品视频 | 国产不卡在线视频 | 中文字幕在线观看一区 | 成人在线播放视频 | 中文字幕 亚洲精品 | 国产一区曰韩二区欧美三区 | a级毛片无码免费真人 | 亚洲国产精品第一区二区 | 国产成人v视频在线观看 | 亚洲三级在线播放 | 国产精品人成 | 国产欧美日韩精品第三区 | 欧美18www| 欧美一级影院 | 亚洲视频日韩视频 | 国产在线91精品天天更新 | 男人女人做性全程视视频 | 欧美一级va在线视频免费播放 | 国内高清久久久久久久久 | 中国的毛片 | 久久国产免费观看精品1 | 精品欧美激情在线看 | 亚洲国产午夜精品理论片的软件 | 日本一线一区二区三区免费视频 | 国产免费久久精品久久久 | 欧洲亚洲一区二区三区 |