0

我在下面的类中使用 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;
 }

这是解决这个问题的好方法吗?

4

0 回答 0