当前位置: 首页 > java >正文

关于读写锁的一些理解

同一线程的两种情况:

读读:

    public static void main(String[] args) throws InterruptedException {ReentrantReadWriteLock lock = new ReentrantReadWriteLock();Lock readLock = lock.readLock();Lock writeLock = lock.writeLock();readLock.lock();System.out.println("read1");readLock.lock();System.out.println("read2");readLock.unlock();readLock.unlock();}

输出:可重入

读写:

    public static void main(String[] args) throws InterruptedException {ReentrantReadWriteLock lock = new ReentrantReadWriteLock();Lock readLock = lock.readLock();Lock writeLock = lock.writeLock();readLock.lock();System.out.println("read1");writeLock.lock();System.out.println("write1");writeLock.unlock();readLock.unlock();}

输出:阻塞了。

写写:

    public static void main(String[] args) throws InterruptedException {ReentrantReadWriteLock lock = new ReentrantReadWriteLock();Lock readLock = lock.readLock();Lock writeLock = lock.writeLock();writeLock.lock();System.out.println("write1");writeLock.lock();System.out.println("write2");writeLock.unlock();writeLock.unlock();}

输出:可重入

写读:

    public static void main(String[] args) throws InterruptedException {ReentrantReadWriteLock lock = new ReentrantReadWriteLock();Lock readLock = lock.readLock();Lock writeLock = lock.writeLock();writeLock.lock();System.out.println("write1");readLock.lock();System.out.println("read1");readLock.unlock();writeLock.unlock();}

输出:文心一言说这种情况是锁降级,我不懂

不同线程的两种情况:

读读:

    public static void main(String[] args) throws InterruptedException {ReentrantReadWriteLock lock = new ReentrantReadWriteLock();Lock readLock = lock.readLock();Lock writeLock = lock.writeLock();readLock.lock();System.out.println("read1");Thread otherRead = new Thread(new Runnable() {@Overridepublic void run() {readLock.lock();System.out.println("otherRead");readLock.unlock();}});otherRead.start();otherRead.join();readLock.unlock();}

输出:

read1
otherRead

读写:

    public static void main(String[] args) throws InterruptedException {ReentrantReadWriteLock lock = new ReentrantReadWriteLock();Lock readLock = lock.readLock();Lock writeLock = lock.writeLock();readLock.lock();System.out.println("read1");Thread otherRead = new Thread(new Runnable() {@Overridepublic void run() {writeLock.lock();System.out.println("otherWrite");writeLock.unlock();}});otherRead.start();otherRead.join();readLock.unlock();}

输出:

read1

写写:

    public static void main(String[] args) throws InterruptedException {ReentrantReadWriteLock lock = new ReentrantReadWriteLock();Lock readLock = lock.readLock();Lock writeLock = lock.writeLock();writeLock.lock();System.out.println("write");Thread otherRead = new Thread(new Runnable() {@Overridepublic void run() {writeLock.lock();System.out.println("otherWrite");writeLock.unlock();}});otherRead.start();otherRead.join();//等待其他线程完成。但是otherRead无法获取到锁,被阻塞。writeLock.unlock();}

输出:

write

写读:

    public static void main(String[] args) throws InterruptedException {ReentrantReadWriteLock lock = new ReentrantReadWriteLock();Lock readLock = lock.readLock();Lock writeLock = lock.writeLock();writeLock.lock();System.out.println("write");Thread otherRead = new Thread(new Runnable() {@Overridepublic void run() {readLock.lock();System.out.println("otherRead");readLock.unlock();}});otherRead.start();otherRead.join();//依旧被阻塞,获取不到读锁writeLock.unlock();}

输出:

write

http://www.xdnf.cn/news/5701.html

相关文章:

  • C++的构造函数和析构函数
  • 六、快速启动框架:SpringBoot3实战
  • RDB和AOF的区别
  • KUKA机器人中断编程2—中断相关的指令
  • 传导发射中的模拟手
  • P1460 [USACO2.1] 健康的荷斯坦奶牛 Healthy Holsteins
  • 【人工智能-agent】--Dify中MCP工具存数据到MySQL
  • 数据库实验报告 系统E-R图设计 2
  • [Git]ssh下用Tortoisegit每次提交都要输密码
  • el-table滚动条,都悬浮在页面的底层显示
  • 区块链技术构建电子发票平台“税链”
  • 2025年5月9日
  • CSPM-3 与 CSPM-4:项目管理认证的进阶之路
  • 【AutoGen革命】多智能体协作系统的架构设计与工程实践
  • 什么是数据集市(Data Mart)?
  • 链表面试题7之相交链表
  • Git日志信息
  • MyTinySTL
  • 【idea】快捷键ctrl+shift+F(Find in files)不起作用
  • C++.Windows图形
  • 养生:开启健康生活的全新篇章
  • C++类和对象--中阶
  • js 画立方体软件开发日记2
  • QuickList
  • Docker编排工具详解:Docker Compose与Docker Swarm
  • 08.webgl_buffergeometry_attributes_none ,three官方示例+编辑器+AI快速学习
  • 电子工程领域常见的缩略语及其对应的中文和英文释义
  • Python-Flask-Dive
  • 【Java学习笔记】多态参数
  • 深度强化学习有什么学习建议吗?