Java 仅在while循环中执行一次

Java 仅在while循环中执行一次,java,while-loop,boolean,Java,While Loop,Boolean,我有一个方法可以向队列中添加对象,还可以检查队列大小。如果队列大小达到最大容量,将发出警报,队列将删除第一个对象。下面是代码 private SomeQueue queue; private boolean raiseAlarmOnce = true; private boolean alarmRaised; private AlarmConnection alarmConnection; void addToQueue(Object obj) { queue.add(obj);

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

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并仅发出一次警报。如果警报成功触发,警报将被清除。想知道更好的方法吗?

若您需要发出警报一次,当队列大小为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();
            }
     }
}

请提供一个没有任何编译器错误的代码示例。此代码是否有问题,或者您是否正在寻找一个?@Abion47这是一个总体思路,而不是详细的代码。我只想确定在while loopraiseAlarm=queue.size>1000中只执行一次的最佳实践是什么;不需要那个零件