【发布时间】:2013-08-02 17:35:43
【问题描述】:
首先,我将描述我想要什么,然后我将详细说明我正在考虑的可能性。我不知道哪个是最好的,所以我需要一些帮助。
我有一个哈希映射,我在其上从Servlet 进行读写操作。现在,由于这个Servlet 在Tomcat 上,我需要哈希映射是线程安全的。基本上,当它被写入时,没有其他东西可以写入它,也没有任何东西可以读取它。
我见过ConcurrentHashMap,但注意到它的get 方法不是线程安全的。然后,我看到了锁和一种叫做同步的东西。
我想知道哪种方法最可靠。
【问题讨论】:
-
ConcurrentHashMap.get 在什么方面不是线程安全的?您在寻找什么级别的粒度? “何时写入”是指会有 多个 put 操作,还是每个都足够是原子的?
-
看到 API 文档,我认为它不是线程安全的。如果说 3 个人决定执行相同的 put 操作,则哈希映射可以有多个 put 操作。
-
@pratnala 它允许并发操作的事实并不意味着它不是线程安全的。
-
此外,如果正在将某些内容写入哈希映射,其他人应该无法读取它。 ConcurrentHashMap 能保证吗?
-
从javadoc中不保证:检索操作(包括get)一般不会阻塞,因此可能与更新操作(包括put和remove)重叠。检索反映了最近完成的更新操作在开始时保持的结果。
标签: java thread-safety concurrenthashmap locks