ConcurrentHashMap使用场景
1:ConcurrentHashMap的使用场景是高并发,可是并不能确保线程安全,而同步的HashMap和HashMap的是锁住整个容器,而加锁之后ConcurrentHashMap不需要锁住整个容器,只需要锁住对应的Segment就好了,所以能够确保高并发同步拜访,提升了功率。
2:能够多线程写。
ConcurrentHashMap把HashMap分红若干个Segmenet
1.get时,不加锁,先定位到segment然后在找到头结点进行读取操作。而value是volatile变量,所以能够确保在竞争条件时确保读取最新的值,如果读到的value是null,则可能正在修正,那么就调用ReadValueUnderLock函数,加锁确保读到的数据是正确的。
2.Put时会加锁,一概添加到hash链的头部。
3.Remove时也会加锁,由于next是final类型不行改动,所以有必要把删除的节点之前的节点都仿制一遍。
4.ConcurrentHashMap答应多个修正操作并发进行,其关键在于使用了锁别离技术。它使用了多个锁来操控对Hash表的不同Segment进行的修正。
ConcurrentHashMap的使用场景是高并发,可是并不能确保线程安全,而同步的HashMap和HashTable的是锁住整个容器,而加锁之后ConcurrentHashMap不需要锁住整个容器,只需要锁住对应的segment就好了,所以能够确保高并发同步拜访,提升了功率。
ConcurrentHashMap能够确保每一次调用都是原子操作,可是并不确保屡次调用之间也是原子操作。
|
|