【发布时间】:2017-09-04 12:37:39
【问题描述】:
通过调用Collections.synchronizedMap() 创建的Java 的SynchronizedMap 似乎对所有映射操作都使用了一个互斥锁。例如:
...
public V get(Object key) {
synchronized (mutex) {return m.get(key);}
}
public V put(K key, V value) {
synchronized (mutex) {return m.put(key, value);}
}
...
为什么作者选择对读取和写入操作使用单个互斥锁? ReadWriteLock 不是更适合这里吗?
【问题讨论】:
-
该类自 java 5 以来已经过时(不确定是正式的还是实际的)。 ConcurrentMap 应该比这两种方法中的任何一种都更有效,因此没有理由花时间改进代码。但是是的,你是对的,它会更好。
-
总的来说,我同意。但据我所知,JDK 中的 LinkedHashMap 没有直接的并发替代方案。这是一种无需外部库即可快速轻松地创建 LRU 缓存的方法。使其线程安全的唯一方法是使用锁。
标签: java multithreading dictionary locking synchronized