2009-08-17 8 views

risposta

13

BoundedFIFOBuffer in Apache Commons Collections (che presumo sia quello a cui ti riferisci) non è deprecato, ha appena spostato i pacchetti. L'originale in org.apache.commons.collections è deprecato, ed è stato invece spostato a org.apache.commons.collections.buffer

+0

Grazie, in qualche modo sono atterrato sulla pagina deprecata. – Justin

10

Perché non basta usare un LinkedBlockingQueue e utilizzare i metodi non-blocking offer (o add) e poll per accedervi? Puoi crearlo con una capacità fissa (ad esempio per renderlo limitato).

+0

Un'altra buona opzione. Grazie. – Justin

+0

Probabilmente non ne vale la pena, ma LinkedBlockingQueue continuerà a bloccare. Le future versioni di hotspot possono probabilmente ottimizzarle. Ma qualcosa di cui essere a conoscenza quando si profilano in seguito. –

2

Ho utilizzato Google Collections di recente. Penso che potresti avere una soluzione Java Generics abbastanza facilmente con esso. C'è una classe chiamata ForwardingList che penso tu possa implementare questa idea abbastanza facilmente. Ovviamente non è così facile come usare BoundedFifoBuffer (non generico) o 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); 
    } 
};