哈希映射的线程安全实现

pra*_*ala 2 java thread-safety concurrenthashmap locks

首先,我将描述我想要的内容,然后我会详细说明我正在考虑的可能性.我不知道哪个最好,所以我想要一些帮助.

我有一个哈希映射,我从中读取和写入操作Servlet.现在,因为这Servlet是在Tomcat上,我需要哈希映射是线程安全的.基本上,当它被写入时,没有别的东西应该写入它,也没有任何东西也应该能够读取它.

我已经看到ConcurrentHashMap但是注意到它的get方法不是线程安全的.然后,我看到了锁和一些叫做synchronized的东西.

我想知道哪种方法最可靠.

Pet*_*rey 17

ConcurrentHashMap.get() 是线程安全的.

您可以HashMap通过包装来使线程安全Collections.synchronizedMap().


Dea*_*or2 4

编辑:删除虚假信息

无论如何,该synchronized关键字是一个安全的选择。它阻止任何线程在块内访问该对象synchronized

// Anything can modify map at this point, making it not thread safe
map.get(0);
Run Code Online (Sandbox Code Playgroud)

相对于

// Nothing can modify map until the synchronized block is complete
synchronized(map) {
    map.get(0);
}
Run Code Online (Sandbox Code Playgroud)