加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Lock写入HashMap

发布时间:2020-12-15 04:21:35 所属栏目:Java 来源:网络整理
导读:我有一个异步更新的HashMap.我需要执行涉及地图的操作,这需要地图在任务期间不改变状态,例如基于地图内容对值进行排序. 有没有一种方法可以锁定一个映射,以便只发生阻塞所有写入线程的读取,因此在解锁映射后,所有的修改都会发生?锁需要能够在我使用Concurre
我有一个异步更新的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();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读