2009-08-17 9 views

Odpowiedz

13

BoundedFIFOBuffer w zbiorach Apache Commons (które, jak zakładam, jest to, do czego się odwołujesz) nie jest przestarzałe, właśnie przeniósł pakiety. Oryginalnym w org.apache.commons.collections jest przestarzała, a zamiast tego została przeniesiona do org.apache.commons.collections.buffer

+0

Dzięki, jakoś wylądowałem na przestarzałej stronie. – Justin

10

Dlaczego nie wystarczy użyć LinkedBlockingQueue i użyć metod non-blocking offer (lub add) i poll do niego dostęp? Możesz utworzyć go ze stałą wydajnością (tzn. Aby był ograniczony).

+0

Kolejna dobra opcja. Dzięki. – Justin

+0

Prawdopodobnie nie warto się tym martwić, ale LinkedBlockingQueue nadal będzie blokował. Przyszłe wersje hotspotu zapewne zoptymalizują to. Ale coś, o czym należy pamiętać, gdy później profilujesz. –

2

Ostatnio używałem Google Collections. Myślę, że z łatwością możesz mieć rozwiązanie Java Generics. Istnieje klasa o nazwie ForwardingList, która moim zdaniem mogłaby całkiem łatwo zrealizować ten pomysł. Oczywiście nie tak łatwe, jak po prostu przy użyciu BoundedFifoBuffer (nie generycznych) lub 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); 
    } 
}; 
Powiązane problemy