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

发布于 2024-11-28 13:01:19 字数 342 浏览 0 评论 0原文

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

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

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

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

谢谢。

I have two processes (producer/consumer). The first one puts elements in a Collection, the second one reads them.

I want the second process not to read every individual element, but wait until:

  • There are at least N elements in the collection OR
  • The last element was received T seconds ago.

Is there any Collection in Java 5+ that allows this kind of behaviour? I was thinking about an implementation of Queue, but I've only found DelayQueue that is not exactly what I need.

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

贩梦商人 2024-12-05 13:01:19

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

类似这样的东西(只需起草大小要求):

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
}

I'd implement an observable collection. The second process will listen to events, signalling that N elements are in the collection (events based on size attribute) and that no element has been added for a certain time (needs a timer, that is reset on every add operation)

Something like this (just drafting the size requirement):

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
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文