我想包装ConcurrentSkipListSet以保持最新(根据比较器)值的固定容量:
private int capacity = 100;
// using Integer just for an illustration
private ConcurrentSkipListSet<Integer> intSet = new ConcurrentSkipListSet<>();因此,我实现了这样的put():
// This method should be atomic.
public void put(int value) {
intSet.add(value);
if (intSet.size() > capacity)
intSet.pollFirst();
}然而,这个put()并不是线程安全的.
注:无其他突变方法。当然,我需要像getLast()或getBefore(Integer value)这样的“只读”方法。
如何用线程安全的方式包装ConcurrentSkipListSet以保持最新值的固定容量?
发布于 2015-12-26 04:09:28
您不太可能做到这一点,并获得ConcurrentSkipListSet的并发好处。在这种情况下,您最好使用Collections.synchronizedNavigableSet(TreeSet),此时您只需编写
synchronized (set) {
set.add(value);
if (set.size() > cap) {
set.pollFirst();
}
}https://stackoverflow.com/questions/34468302
复制相似问题