介绍
对一些并发包下的集合做一些特殊性介绍。
ConcurrentHashMap
CocurrentHashMap不能被加锁来执行独占式访问,因此无法使用客户端加锁来创建新的院子操作
存在某些局限性,无法使用客户端加锁的形式,来保证独占式访问,例如:
1 | // since jdk 1.7 |
上述的代码,代码同步块①内的代码并不能保证其他在执行的时候,阻塞其他线程对于concurrentmap
的更新操作。
比如,在获取concurrentmap
对象的对象锁后执行①内的代码的时候,有如下代码可以同时执行更新操作:
1 | concurrentmap.put('key', new Object()); |
这是由于,concurrentmap
内部的锁(JDK1.7的分段锁/JDK1.8的Node对象锁)与客户端锁定的锁不是同一个锁。Java只有在对同一个锁操作,才可以阻塞其他线程的操作。