Коллекции с несколькими ограничениями (время и размер) в Java - PullRequest
5 голосов
/ 08 августа 2011

У меня есть два процесса (производитель / потребитель).Первый помещает элементы в коллекцию, второй читает их.

Я хочу, чтобы второй процесс не читал каждый отдельный элемент, а дождался:

  • По крайней мере, естьN элементов в коллекции ИЛИ
  • Последний элемент был получен T секунд назад.

Существует ли какая-либо коллекция в Java 5+, которая допускает такое поведение?Я думал о реализации Queue , но я нашел только DelayQueue, который не совсем то, что мне нужно.

Спасибо.

1 Ответ

2 голосов
/ 08 августа 2011

Я бы реализовал наблюдаемую коллекцию . Второй процесс будет прослушивать события, сигнализируя, что элементы N находятся в коллекции (события основаны на атрибуте size), и что в течение определенного времени ни один элемент не был добавлен (требуется таймер, который сбрасывается при каждом * 1005). * операция)

Примерно так (просто составление требования размер ):

public ObservableCollection implements Collection {

   private int sizetrigger;
   private Collection collection;
   private Collection<Listener> listeners = new ArrayList<Listener>();
   public ObservableCollection(Collection collection) {
     this.collection = collection;
   }

   @Override
   boolean add(Object element) {
     collection.add(element);
     if (size >= sizeTrigger) {
        fireSizeEvent();
     }
   }

   private fireSizeEvent() {
      for(Listener listener:listeners) {
         listener.thresholdReached(this);
      }
   }

   // addListener, removeListener and implementations of interface methods
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...