簡體   English   中英

偶爾執行一次

[英]Only execute once in a while loop

我有一種將對象添加到隊列並檢查隊列大小的方法。 如果隊列大小達到最大容量,將發出警報,並且隊列將刪除第一個對象。 以下是代碼

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM