Java synchronized block vs concurrentHashMap vs Collections.synchronizedMap

说如果有一个synchronized方法并在该方法中,我更新这样的hashmap:

public synchronized void method1()
{
    myHashMap.clear();
    //populate the hashmap, takes about 5 seconds.
}

现在当method1正在运行并且正在重新填充hashmap时,如果还有其他线程要获取hashmap的值,我认为它们会被阻塞吗?

现在,如果我将hashmap更改为ConcurrentHashMap,而不是使用sync方法,那么行为是什么?

public void method1()
{
     myConcurrentHashMap.clear();
    //populate the hashmap, takes about 5 seconds.
}

如果我使用Collections.synchronizedMap怎么办?它是一样的吗?

如果要同步对HashMap进行所有读写操作,则需要对访问HashMap的所有方法进行同步;仅阻止一种方法是不够的.

ConcurrentHashMap允许线程安全地访问您的数据而无需锁定.这意味着您可以在一个线程中添加/删除值,同时在另一个线程中获取值而不会遇到异常.另见documentation of ConcurrentHashMap

翻译自:https://stackoverflow.com/questions/12628600/java-synchronized-block-vs-concurrenthashmap-vs-collections-synchronizedmap

转载注明原文:Java synchronized block vs concurrentHashMap vs Collections.synchronizedMap