我需要一个并发弱哈希集而不使用Guava集合。 哪一个是正确的? 有副作用吗?
private Set<Session> subscribers1 = Collections.newSetFromMap(
Collections.synchronizedMap(new WeakHashMap<Session, Boolean>())
);
private Set<Session> subscribers2 = Collections.synchronizedSet(
Collections.newSetFromMap(new WeakHashMap<Session, Boolean>())
);
答案 0 :(得分:0)
如果你看一下这些实现,它的差不多。
Collections.newSetFromMap
创建一个新的SetFromMap extends AbstracSet
实例。 SetFromMap
类基本上是地图对象的包装器。但它确实从addAll
继承了AbstracSet
方法。这意味着在第一个选项中:
private Set<Session> subscribers1 = Collections.newSetFromMap(
Collections.synchronizedMap(new WeakHashMap<Session, Boolean>())
);
并非所有操作都将被同步(即addAll
方法 - 尽管它使用了引擎盖下的同步add
方法。由于这个事实,我建议选择第二个选项:
private Set<Session> subscribers2 = Collections.synchronizedSet(
Collections.newSetFromMap(new WeakHashMap<Session, Boolean>())
);