句子的含义是什么 - [ConcurrentHashMap无法锁定以进行独占访问]?

时间:2016-10-03 12:03:50

标签: java

Joshua Block&共同作者着名的 Java Concurrentcy In Practice 提出了 -

这是来自第5章构建模块 -

  

...由于ConcurrentHashMap无法为独占锁定   访问.....

我所理解的是,独占访问是指锁定整个集合,每个线程在操作期间持有一个锁,使其成为原子。

    ConcurrentHashMap< String, String> map = new ConcurrentHashMap< String, String>();

    public void getExclusiveAccess(){
        synchronized (map) {
            //....
        }
    }

尽管做上述事情会是愚蠢的,但显然可以通过相同的方式实现独家访问。
请建议。
为什么作者说一个ConcurrentHashMap无法锁定以进行独占访问

2 个答案:

答案 0 :(得分:2)

我已经完成了这个并且它可以实现,但它只适用于这个外部锁定,ConcurrentMap不支持。如果您在不使用此同步的情况下在任何地方访问地图,它就不会是独占的。如果你在任何地方使用同步它不再是并发的。

唯一可能有意义的是,如果您需要独占写入而非独占读取。

答案 1 :(得分:1)

  

显然可以通过相同的

实现独占访问

如果其他代码使用同步块之外的地图(这是完全可以接受的),则不行。

这与synchronizedMap不同,其中所有方法都在地图上自动同步 - 因此,如果您在此类地图上synchronized(map) {... },则您实际上拥有独占访问权。