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