ConcurrentHashMap修饰符的同步

1 java concurrency synchronization concurrenthashmap

我想借助于缓存一些IO ConcurrentHashMap.二进制文件的修改也应该反映在缓存中.由于缓存将由多个线程使用,因此所有IO操作都是同步的.地图的修改进入同synchronized一块内.大致如下:

synchronized (file) {
    file.deleteRecord(index)
    map.remove(index);
}
Run Code Online (Sandbox Code Playgroud)

synchronized(file) {
    file.writeRecord(index, record);
    map.put(index, record);
}
Run Code Online (Sandbox Code Playgroud)

这两个mapfile是私人,而不是从缓存级外看到.

如果缓存读取,是否保持线程安全,即map.get(index)没有synchronized块?

正如我前面提到的,ConcurrentHashMap用作地图实现.

Jon*_*eet 5

对.这基本上就是重点ConcurrentHashMap.从文档:

检索操作(包括get)通常不会阻塞,因此可能与更新操作(包括put和remove)重叠.检索反映了最近完成的 更新操作的结果.

并从包文件:

并发集合是线程安全的,但不受单个排除锁的控制.在特定情况下ConcurrentHashMap,它安全地允许任意数量的并发读取以及可调数量的并发写入.

(当然,这两个文档页面都有更详细的内容.它们值得仔细阅读.)