首页 > 试题广场 >

ConcurrentHashMap锁加在了哪些地方?

[问答题]
请你说明ConcurrentHashMap锁加在了哪些地方?
不同的Segment,ConcurrentHashMap将数据分段,在读写的时候只加到相应的数据段上,这样在多线程的时候,可以读写其他段的数据,提高效率
发表于 2019-05-05 15:08:53 回复(0)
更多回答
ConcurrentHashMap 
Java7是由Segment数组实现的,一个Segment锁住几个HashEntry元素;
Java8是由synchronized锁住transient volatile Node<K,V>[] table 数组的一个元素(即头结点,锁粒度比Java7低),还通过CAS(Unsafe对象)操作数据更新、插入等。
发表于 2019-08-02 12:39:23 回复(1)
补充个JDK1.8的:1.8 中取消了segments字段,直接采用transient volatile HashEntry<k,v>[] table保存数据,采用table数组元素作为锁,从而实现了对每一行数据进行加锁,进一步减少并发冲突的概率。
编辑于 2019-01-20 22:20:31 回复(0)
不同的Segment,ConcurrentHashMap将数据分段,在读写的时候只加到相应的数据段上,这样在多线程的时候,可以读写其他段的数据,提高效率
发表于 2019-04-04 09:21:27 回复(0)
加在每个Segment 上面
发表于 2019-05-02 18:42:09 回复(0)
不同的Segment,ConcurrentHashMap将数据分段,在读写的时候只加到相应的数据段上,这样在多线程的时候,可以读写其他段的数据,提高效率
发表于 2019-04-29 18:13:01 回复(0)
加在每个Segment 上面。
发表于 2019-04-27 13:36:55 回复(0)
加在每个Segment 上面。
发表于 2019-04-26 22:57:10 回复(0)

segment是一种可重入锁

发表于 2019-01-03 20:59:13 回复(0)