Java Timer isRunning()检查失败

时间:2016-11-30 12:15:56

标签: java timer

我的逻辑是:

  1. 当新数据到来时,检查计时器是否正在运行
  2. 如果跑步,什么都不做
  3. 如果没有运行,则触发计时器以安排在3000ms之后执行TimerTask
  4. 当TimerTask开始运行时,将timer.isRunning设置为false
  5. 我的问题:

    此机制不起作用。计时器在1秒内被触发几次。但是,定时器的触发频率不应超过每3秒一次。

    在我的计时器中有一个布尔值isRunning。当计时器启动时,设置isRunning = true。当TimerTask被触发时,它会被设置为false。

    public class DBconnectDelayTimer extends Timer {
    
        /**
         *  Indicates if the Timer is running
         */
        private boolean isRunning;
    
        public DBconnectDelayTimer() {
            super();
            isRunning = false;
        }
    
        @Override
        public void schedule(TimerTask task, long delay) {
            isRunning = true;
            super.schedule(task, delay);
        }
    
        public boolean isRunning() {
            return isRunning;
        }
    
        public void resetTimer() {
            isRunning = false;
        }
    }
    

    我以这种方式使用计时器:

    for(Item item : items) {
        if(item.getUID.equals(uid)) {
            itemExist = true;
            break;
        }
    }
    
    if(!itemExist) {
        items.add(item);
        runTimer();
    }
    

    runTimer方法如下:

    private void runTimer() {
        if (!mTimer.isRunning()) {
            mTimer.schedule(getTimerTask(), 3000);
            Log.d("WTF", "Run Timer");
        }
    }
    

    mTimer.schedule()应该将isRunning设置为true,并且计时器不应该在前一个TimerTask运行之前安排另一个TimerTask。

    private TimerTask getTimerTask() {
        final Fragment hostFragment = this;
        Log.d("WTF", hostFragment.getClass().toString());
    
        return new TimerTask() {
            @Override
            public void run() {
                /**
                 *  Reset Timer so it can be scheduled for next round of execution
                 */
                mTimer.resetTimer();
            }
        }
    }
    

    然而,它失败了。日志显示:

    11-30 18:28:25.002 26842-27081/com.nethom.itemmanager D/WTF: Run Timer
    11-30 18:28:25.003 26842-27085/com.nethom.itemmanager D/WTF: Run Timer
    11-30 18:28:25.003 26842-27086/com.nethom.itemmanager D/WTF: Run Timer
    11-30 18:28:25.003 26842-27083/com.nethom.itemmanager D/WTF: Run Timer
    11-30 18:28:25.003 26842-27082/com.nethom.itemmanager D/WTF: Run Timer
    11-30 18:28:25.003 26842-27084/com.nethom.itemmanager D/WTF: Run Timer
    

    感谢您的帮助。

0 个答案:

没有答案