84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
场景是这样的:两个对象往一个 Map 里循环写入,另外一个对象偶尔读一次,写的频率比读的频率高很多。 希望实现的是读的时候暂停写入。CocurrentHashMap 和 ReadWriteLock 各有什么优劣吗?
Map
CocurrentHashMap
ReadWriteLock
学习是最好的投资!
应该用ConcurrentHashMap。
ConcurrentHashMap
ReadWriteLock适用于读线程远远多于写线程的情况下,而且一般是有写的情况下读会阻塞——这样下来甚至还不如一般的锁。
从简化编程模型来看,应该用 ConcurrentHashMap,用它直接生成 Map 的实例即可。而使用锁机制,你需要自己管理这些锁的状态。
从性能来看,同样应该用 ConcurrentHashMap,因为它内部已经对读写操作进行了分块优化,在大多数情况下,读写可以同时进行。你自己很难实现得更加高效。具体细节可见这篇文章
应该用
ConcurrentHashMap
。ReadWriteLock
适用于读线程远远多于写线程的情况下,而且一般是有写的情况下读会阻塞——这样下来甚至还不如一般的锁。从简化编程模型来看,应该用
ConcurrentHashMap
,用它直接生成Map
的实例即可。而使用锁机制,你需要自己管理这些锁的状态。从性能来看,同样应该用
ConcurrentHashMap
,因为它内部已经对读写操作进行了分块优化,在大多数情况下,读写可以同时进行。你自己很难实现得更加高效。具体细节可见这篇文章