(Java)如果HashSet不同步,为什么允许同步使用HashSet?

时间:2017-11-29 22:50:08

标签: java multithreading synchronization hashset synchronous

我一直在阅读HashMapHashSetHashTable之间的差异。我注意到的一个关键问题是,HashMap / HashSetHashTable时未被同步。

然而,在我之前见过的代码库中,有几个地方使用了像这样的块:

synchronized (hashSet) {
    //Some code involving the hashset 
}

如果HashSet未同步,这怎么可能? synchronized块是否只允许我们使用非同步数据结构,就好像它是同步的一样?

如果同步HashSet,我们不必包含synchronized(){}块吗?

1 个答案:

答案 0 :(得分:6)

synchronized块需要一些对象同步。如果说HashSet是不同步的,那只意味着它的方法本身并没有同步,如果你打算在多线程上下文中使用它,你应该处理它您自己同步(例如,synchronizing对象HashSet对象,如您的代码段所示。