java – Lock写入HashMap

我有一个异步更新的HashMap.我需要执行涉及地图的操作,这需要地图在任务期间不改变状态,例如基于地图内容对值进行排序.

有没有一种方法可以锁定一个映射,以便只发生阻塞所有写入线程的读取,因此在解锁映射后,所有的修改都会发生?锁需要能够在我使用ConcurrentHashMap的同时允许多个线程写入,并且我想利用ConcurrentHashMap的好处.

最佳答案
ConcurrentHashMap不提供方法调用之间的线程安全性,仅在单个调用内.因此,如果要在执行操作时保持映射不变,则需要使用自己的锁将调用包装到地图中.

例如,使用ReadWriteLock:

ReadWriteLock readWriteLock = new ReentrantReadWriteLock();

当您更新地图时

readWriteLock.writeLock().lock();

// do the updates

readWriteLock.writeLock().unlock();

当你想从地图上读取

readWriteLock.readLock().lock();

// perform the read and its operations that rely on the map not changing

readWriteLock.readLock().unlock();

转载注明原文:java – Lock写入HashMap - 代码日志