2009-08-17 38 views

Trả lời

13

BoundedFIFOBuffer trong Bộ sưu tập của Apache Commons (mà tôi cho là những gì bạn đang đề cập đến) không được dùng nữa, nó vừa chuyển gói. Bản gốc trong số org.apache.commons.collections không còn được dùng nữa và thay vào đó đã được chuyển đến org.apache.commons.collections.buffer

+0

Cảm ơn, bằng cách nào đó tôi đã truy cập trang không dùng nữa. – Justin

10

Tại sao không chỉ cần sử dụng một LinkedBlockingQueue và sử dụng các phương pháp non-blocking offer (hoặc add) và poll truy cập vào nó? Bạn có thể tạo nó với dung lượng cố định (tức là để làm cho nó bị giới hạn).

+0

Một lựa chọn tốt khác. Cảm ơn. – Justin

+0

Có lẽ không đáng được quan tâm, nhưng LinkedBlockingQueue vẫn sẽ mất một khóa. Các phiên bản tương lai của điểm phát sóng có thể tối ưu hóa điều đó. Nhưng một cái gì đó để được nhận thức khi profiling sau này. –

2

Gần đây tôi đã sử dụng Google Collections. Tôi nghĩ rằng bạn có thể có một giải pháp Java Generics khá dễ dàng với nó. Có một lớp được gọi là ForwardingList mà tôi nghĩ bạn có thể thực hiện ý tưởng này khá dễ dàng. Rõ ràng là không dễ dàng như chỉ sử dụng BoundedFifoBuffer (không chung chung) hoặc 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); 
    } 
}; 
Các vấn đề liên quan