Java中是否存在有限的非阻塞集合?

时间:2009-08-17 20:03:58

标签: java collections

我唯一能找到的是BoundedFIFOBuffer,不推荐使用。还有其他人吗?

4 个答案:

答案 0 :(得分:13)

Apache Commons Collections中的

BoundedFIFOBuffer(我假设你所指的是)并没有被弃用,它只是移动了包。 org.apache.commons.collections中的原始版本已弃用,而已移至org.apache.commons.collections.buffer

答案 1 :(得分:13)

为什么不使用LinkedBlockingQueue并使用非阻止方法offer(或add)和poll来访问它?您可以使用固定容量创建它(即使其有界)。

答案 2 :(得分:3)

Apache commons-collections中有一些有界集合,包括BoundedFifoBuffer

在同一个库中,还有BoundedBufferCircularFifoBuffer

答案 3 :(得分:2)

我最近一直在使用Google Collections。我认为你可以很容易地使用Java Generics解决方案。有一个名为ForwardingList的类,我认为你可以很容易地实现这个想法。显然不像使用BoundedFifoBuffer(非泛型)或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);
    }
};