2
我需要一个并发的弱哈希集而不使用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>())
);
“不是所有的操作都将被同步(即'addAll'方法)” - 我不认为这是正确的,因为'AbstractCollection.addAll'循环并调用'add',它将委托给包裹地图的同步'put'方法。但是这仍然意味着对于批量方法来说,在最顶层视图中进行同步会更有效率,所以您的推荐似乎至少是正确的。 –
你说得对,它调用了同步的“add”。但是'addAll'就像第二个选项一样。这就是我的意思(我没有检查addAll的实现)。无论如何,这是两种方法之间的唯一区别,至少我看不到任何其他方法。但是,很难想象这种差异会成为一个大问题的用例。 – MarcelK