我一直在阅读HashMap
,HashSet
和HashTable
之间的差异。我注意到的一个关键问题是,HashMap
/ HashSet
在HashTable
时未被同步。
然而,在我之前见过的代码库中,有几个地方使用了像这样的块:
synchronized (hashSet) {
//Some code involving the hashset
}
如果HashSet
未同步,这怎么可能? synchronized块是否只允许我们使用非同步数据结构,就好像它是同步的一样?
如果同步HashSet
,我们不必包含synchronized(){}块吗?
答案 0 :(得分:6)
synchronized
块需要一些对象同步。如果说HashSet
是不同步的,那只意味着它的方法本身并没有同步,如果你打算在多线程上下文中使用它,你应该处理它您自己同步(例如,synchronizing
对象HashSet
对象,如您的代码段所示。