[英]Take a snapshot of a Set
我已經設置了項目,並希望將其發送進行並行處理。
但是,我想在之后修改原始集合,這會導致一些並發問題,因此,我認為拍攝快照或其中的某個集合並發送THAt進行處理將是很好的選擇。
clone
會很好嗎? 或者我應該做一個新的Set
它自己? 還是我錯過了一些不錯的方法?
編輯:我現在正在使用它,它似乎工作得很好:
public class BufferedHashSet<E> extends HashSet<E> {
private List<E> toAdd = new LinkedList<E>();
private List<Object> toRemove = new LinkedList<Object>();
@Override
public boolean add(E e)
{
synchronized (this) {
toAdd.add(e);
return true;
}
}
@Override
public boolean remove(Object e)
{
synchronized (this) {
toRemove.add(e);
return true;
}
}
public void flush()
{
synchronized (this) {
for (E e : toAdd) {
super.add(e);
}
for (Object e : toRemove) {
super.remove(e);
}
toAdd.clear();
toRemove.clear();
}
}
}
在我看來,最優雅的解決方案是使用Set.addAll()
方法。
Set set;
Set snapshot = new TreeSet<>(); //or any Set implementation you use
snapshot.addAll(set);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.