Java中具有多个约束(时间和大小)的集合

时间:2011-08-08 08:00:43

标签: java collections

我有两个进程(生产者/消费者)。第一个将元素放在Collection中,第二个元素读取它们。

我希望第二个过程不要读取每个元素,而是等到:

  • 集合中至少有N个元素 OR
  • 最后一个元素是在T秒前收到的。

Java 5+中是否有任何允许这种行为的集合?我在考虑Queue的实现,但我发现DelayQueue并不是我需要的。

谢谢。

1 个答案:

答案 0 :(得分:2)

我实现了一个可观察集合。第二个进程将监听事件,发出N元素在集合中的信号(基于size属性的事件)并且在一定时间内没有添加任何元素(需要一个计时器,即重置在每个add操作上)

像这样(只是起草尺寸要求):

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
}