我在下面的类中使用 CopyOnWriteArraySet,因为我只是喜欢它的线程安全迭代器。
public class MyClass{
Set _children = new CopyOnWriteArraySet();
public void setChildren(Set children){
_children = children;
}
public Set getChildren(){
return _children;
}
}
但是,我也使用 Hibernate 来实现持久性,它将我的 CopyOnWriteArraySet 替换为它自己的 PersistentSet(它在内部使用 HashSet)。
不幸的是,HashSet 不是线程安全的,所以我想要我的 CopyOnWriteArraySet 回来。
转换的最佳实践是什么?
我个人的,天真的尝试是用这个替换setter:
public void setChildren(Set children){
CopyOnWriteArraySet newSet = null;
if ((children instanceof CopyOnWriteArraySet) == false){
newSet = new CopyOnWriteArraySet(children);
}
else{
newSet = (CopyOnWriteArraySet)children;
}
_children = newSet;
}
这是解决这个问题的好方法吗?