gpt4 book ai didi

java - 如何包装 ConcurrentSkipListSet 以线程安全的方式保持最新值的固定容量?

转载 作者:行者123 更新时间:2023-11-30 10:52:08 24 4
gpt4 key购买 nike

我想包装 ConcurrentSkipListSet保持最新的固定容量(根据 Comparator )值:

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) 这样的“只读”方法。

How to wrap ConcurrentSkipListSet to keep a fixed capacity of the latest values in a thread-safe way?

最佳答案

您不太可能能够做到这一点并获得 ConcurrentSkipListSet 的并发优势。到那时,您还不如使用 Collections.synchronizedNavigableSet(TreeSet),此时您只需编写

synchronized (set) {
set.add(value);
if (set.size() > cap) {
set.pollFirst();
}
}

关于java - 如何包装 ConcurrentSkipListSet 以线程安全的方式保持最新值的固定容量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34468302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com