Is there a bounded non-blocking Collection in Java?

前端 未结 4 1416
情话喂你
情话喂你 2020-12-10 13:56

The only one I can find is the BoundedFIFOBuffer, which is deprecated. Any others?

相关标签:
4条回答
  • 2020-12-10 14:32

    There are some bounded collections in Apache commons-collections, including a BoundedFifoBuffer.

    In the same library, is also BoundedBuffer and CircularFifoBuffer

    0 讨论(0)
  • 2020-12-10 14:42

    I've been using Google Collections recently. I think you could have a Java Generics solution pretty easily with it. There is a class called ForwardingList which I think you could implement this idea pretty easily. Obviously not as easy as just using BoundedFifoBuffer (non-generic) or ArrayBlockingQueue.

    final ArrayList<MyObject> realList = Lists.newArrayList();
    final List<MyObject> list = new ForwardingList<MyObject>() {
        protected List<MyObject> delegate() {
            return realList;
        }
    
        public boolean add(MyObject obj) {
            if(delegate().size() > 100) return false;
            return delegate().add(obj);
        }
    };
    
    0 讨论(0)
  • BoundedFIFOBuffer in Apache Commons Collections (which I assume is what you're referring to) is not deprecated, it has just moved packages. The original one in org.apache.commons.collections is deprecated, and has instead been moved to org.apache.commons.collections.buffer

    0 讨论(0)
  • 2020-12-10 14:50

    Why not just use a LinkedBlockingQueue and use the non-blocking methods offer (or add) and poll to access it? You can create it with a fixed capacity (i.e. to make it bounded).

    0 讨论(0)
提交回复
热议问题