import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; import com.huawei.rm9000.pms.amf.ha.util.AmfHALogger; import com.huawei.rm9000.pms.dmf.delegate.DmfStatistDelegate; import com.huawei.rm9000.pms.dmf.delegate.DmfTransactionDelegate; public class StatistBO { /* 定時器 */ private Timer timer = new Timer(); /* 週期統計任務 */ private StatistTask task = new StatistTask(); /* 日期對象 */ private Date date = null; /* 單實例 */ private static StatistBO INSTANCE = new StatistBO(); /** * 防止實例化 */ private StatistBO() { } /** * 獲取單實例。 * @return 單實例。 */ public static StatistBO getInstance() { return INSTANCE; } /** * 重啓週期更新的Timer */ private void restartTimer() { // 關閉當前任務 task.cancel(); // 計算下一個定時執行時間 date = getNextStatistDate(); task = new StatistTask(); timer.schedule(task, date); } /** * 啓動週期統計功能。 */ public void periodicStatistStart() { //獲取首次執行時間,開始執行,測試獲取下一個整點時間正確 date = getFistStatistDate(); timer.schedule(task, date); } //測試用的方法 public void testStatist() { Calendar c = Calendar.getInstance(); int min = c.get(Calendar.MINUTE); int hour = c.get(Calendar.HOUR); c.set(Calendar.MINUTE, min + 1);//一分鐘後調用 timer.schedule(task, c.getTime()); } /** * <p>週期統計Task</p> */ public class StatistTask extends TimerTask { @Override public void run() { try { // 啓動週期統計功能。 beginStatist(); // 開啓下一次週期更新定時器 restartTimer(); } catch (Throwable e) { AmfHALogger.error(e); } } }