Java并发多线程编程——ReentrantReadWriteLock中的锁降级详解
2021/5/18 1:25:23
本文主要是介绍Java并发多线程编程——ReentrantReadWriteLock中的锁降级详解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、ReentrantReadWriteLock中的降级锁
- 降级锁是指写锁降级为读锁。
- 在写锁没有释放的时候,获取到读锁,再释放写锁。
二、ReentrantReadWriteLock降级锁的代码示例
package com.xz.thread.t12; import java.util.HashMap; import java.util.Map; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; /** * @description: ReentrantReadWriteLock降级锁示例 * @author: xz * @create: 2021-05-17 22:09 */ public class Demo { /** * 1、ReentrantReadWriteLock实例实现了ReadWriteLock接口 * 2、声明一个ReentrantReadWriteLock实例,指向父类ReadWriteLock的引用 * 因为ReentrantReadWriteLock可以保证公平或者非公平 * 3、ReadWriteLock类中只有readLock()和writeLock() 两个方法 */ private ReadWriteLock rwl =new ReentrantReadWriteLock(); //读锁 private Lock r =rwl.readLock(); //写锁 private Lock w =rwl.writeLock(); //声明一个map,存储数据 private Map<String,Object> map =new HashMap<>(); //声明一个boolean类型的状态,用于判断是读操作还是写操作;volatile关键字保证可见性 private volatile boolean isUpdateStatus; //定义一个读写方法 public void readWriteMethod(){ r.lock();//为了保证isUpdateStatus能够获取到最新的值,添加读锁 if(isUpdateStatus){//如果isUpdateStatus是最新的值 r.unlock();//因为要进行写操作,所以需要释放读锁 w.lock();//在写操作之前,为了保证写的状态,需要加写锁 map.put("key1","v1");//写操作 //开始锁降级; //再写操作没有释放的时候,获取到读锁,再释放写锁 r.lock(); w.unlock();//写操作完成后释放写锁 //锁降级完成; } Object obj = map.get("key1");//写操作 r.unlock();//释放读锁 System.out.println(Thread.currentThread().getName()+"读操作获取到的值:"+obj); } }
这篇关于Java并发多线程编程——ReentrantReadWriteLock中的锁降级详解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南