2009-08-17 40 views

回答

13

BoundedFIFOBuffer在Apache Commons Collections(我認爲是您所指的)不會被棄用,它只是移動了軟件包。原來在org.apache.commons.collections已過時,反而被移到org.apache.commons.collections.buffer

+0

謝謝,不知何故,我登陸了不推薦的頁面。 – Justin 2009-08-17 20:19:00

10

爲什麼不直接使用一個LinkedBlockingQueue,並使用非阻塞方法offer(或add)和poll訪問它?你可以創建一個固定的容量(即使它有界限)。

+0

另一個不錯的選擇。謝謝。 – Justin 2009-08-17 20:29:52

+0

可能不值得關注,但LinkedBlockingQueue仍然會鎖定。未來版本的熱點可能可以優化。但是稍後分析時應該注意一些事情。 – 2009-08-18 00:34:33

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); 
    } 
};