偶尔执行一次

时间:2019-02-19 20:09:05

标签: java while-loop boolean

我有一种将对象添加到队列中并检查队列大小的方法。如果队列大小达到最大容量,将发出警报,并且队列将删除第一个对象。以下是代码

private SomeQueue queue;
private boolean raiseAlarmOnce = true;
private boolean alarmRaised;
private AlarmConnection alarmConnection;

void addToQueue(Object obj) {

     queue.add(obj);

     while (queue.size() > 1000) {
         queue.remove(); 

         if (m_raiseAlarmOnce) {
            // raiseAlarm mtheod will return boolean value to indicate 
            // the result of raising alarm
            m_alarmRaised = alarmConnection.raiseAlarm();
            raiseAlarmOnce = false;
         }
      }
      m_raiseAlarmOnce = true;

      if (m_alarmRaised) {
         alarmConnection.clear();
         m_alarmRaised = false;
      }
   }

如果队列大小大于1000,则队列将连续删除obj,并且仅引发一次警报。如果警报成功发出,则警报将被清除。只想知道任何更好的方法吗?

1 个答案:

答案 0 :(得分:1)

如果您需要一次发出警报,则在队列大小为1001、1002等而不是每次迭代一次的情况下,请在使用标志的同时发出警报

我建议在处理线程或单例实例时使用局部变量

void addToQueue(Object obj) {

     queue.add(obj)
     boolean raisAlarm = false;

     while (queue.size() > 1000) {
         queue.remove(); 
         raisAlarm  = true;
      }


      if (raisAlarm) {
            // raiseAlarm mtheod will return boolean value to indicate 
            // the result of raising alarm
            boolean m_alarmRaised = alarmConnection.raiseAlarm();
            if (m_alarmRaised) {
              alarmConnection.clear();
            }
     }
}