package lock.readwrite;import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.ReentrantReadWriteLock;/*** 描述:     演示ReentrantReadWriteLock可以降级,不能升级*/
public class Upgrading {private static ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(false);private static ReentrantReadWriteLock.ReadLock readLock = reentrantReadWriteLock.readLock();private static ReentrantReadWriteLock.WriteLock writeLock = reentrantReadWriteLock.writeLock();private static void readUpgrading() {readLock.lock();try {System.out.println(Thread.currentThread().getName() + "得到了读锁,正在读取");Thread.sleep(1000);System.out.println("升级会带来阻塞");writeLock.lock();System.out.println(Thread.currentThread().getName() + "获取到了写锁,升级成功");} catch (InterruptedException e) {e.printStackTrace();} finally {System.out.println(Thread.currentThread().getName() + "释放读锁");readLock.unlock();}}private static void writeDowngrading() {writeLock.lock();try {System.out.println(Thread.currentThread().getName() + "得到了写锁,正在写入");Thread.sleep(1000);readLock.lock();System.out.println("在不释放写锁的情况下,直接获取读锁,成功降级");} catch (InterruptedException e) {e.printStackTrace();} finally {readLock.unlock();System.out.println(Thread.currentThread().getName() + "释放写锁");writeLock.unlock();}}public static void main(String[] args) throws InterruptedException {
//        System.out.println("先演示降级是可以的");
//        Thread thread1 = new Thread(() -> writeDowngrading(), "Thread1");
//        thread1.start();
//        thread1.join();
//        System.out.println("------------------");
//        System.out.println("演示升级是不行的");Thread thread2 = new Thread(() -> readUpgrading(), "Thread2");thread2.start();}
}

读写锁的由奢入俭“易”相关推荐

  1. 由俭入奢易,由奢入俭难

    勤俭就是勤劳节俭,包括努力工作和节约用度两个重要方面.我国自古就以勤俭作为修身治家治国 的美德,<尚书>说:"惟日孜孜,无敢逸豫."<左传>引古语说:&qu ...

  2. 常⻅锁策略(1. 乐观锁 悲观锁2. 公平锁 非公平锁3. 读写锁4. 可重入锁 自旋锁)

    目录 1. 乐观锁 & 悲观锁 1.1乐观锁定义 1.2 乐观锁实现 -- CAS 1.3 悲观锁定义和应⽤ 2. 公平锁 & 非公平锁 3. 读写锁 3.1 读写锁 3.2 独占锁 ...

  3. 并发编程-19AQS同步组件之重入锁ReentrantLock、 读写锁ReentrantReadWriteLock、Condition

    文章目录 J.U.C脑图 ReentrantLock概述 ReentrantLock 常用方法 synchronized 和 ReentrantLock的比较 ReentrantLock示例 读写锁R ...

  4. 聊聊高并发(二十八)解析java.util.concurrent各个组件(十) 理解ReentrantReadWriteLock可重入读-写锁

    这篇讲讲ReentrantReadWriteLock可重入读写锁,它不仅是读写锁的实现,并且支持可重入性. 聊聊高并发(十五)实现一个简单的读-写锁(共享-排他锁) 这篇讲了如何模拟一个读写锁. 可重 ...

  5. 并发锁之二:ReentrantReadWriteLock读写锁

    一.简介 读写锁是一种特殊的自旋锁,它把对共享资源对访问者划分成了读者和写者,读者只对共享资源进行访问,写者则是对共享资源进行写操作.读写锁在ReentrantLock上进行了拓展使得该锁更适合读操作 ...

  6. java 读写锁_Java中的读写锁

    一.读写锁 1.初识读写锁 a)Java中的锁--Lock和synchronized中介绍的ReentrantLock和synchronized基本上都是排它锁,意味着这些锁在同一时刻只允许一个线程进 ...

  7. java锁(公平锁和非公平锁、可重入锁(又名递归锁)、自旋锁、独占锁(写)/共享锁(读)/互斥锁、读写锁)

    前言 本文对Java的一些锁的概念和实现做个整理,涉及:公平锁和非公平锁.可重入锁(又名递归锁).自旋锁.独占锁(写)/共享锁(读)/互斥锁.读写锁 公平锁和非公平锁 概念 公平锁是指多个线程按照申请 ...

  8. 谈谈java并发锁(重入锁、读写锁、公平锁)

    目录 重入锁 简单重入锁 重入锁的等待通知(Condition) 多Condition 公平锁和非公平锁 读写锁ReentrantReadWriteLock 锁优化总结: 重入锁和读写锁,他们具有比s ...

  9. ReentrantReadWriteLock可重入读写锁分析

    ReentrantReadWriteLock 可重入的读写锁 什么叫可重入:就是同一个线程可以重复加锁,可以对同一个锁加多次,每次释放的时候回释放一次,直到该线程加锁次数为0,这个线程才释放锁. 什么 ...

最新文章

  1. Async_Await;
  2. 365天里有300天都想辞职,换个公司,你的2019会更好吗?
  3. php页面时长,页面执行时间太长,请诸位大大帮忙看看
  4. CNN for Semantic Segmentation(语义分割,论文,代码,数据集,标注工具,blog)
  5. Linux系统编程---5(共享存储映射,存储映射I/O,mmap函数,父子进程间通信,匿名映射)
  6. windows7系统设置动态屏保的教程
  7. Apache Beam的API设计
  8. 变速更顺滑_CVT变速箱中的小弱鸡?10万公里必坏?变速箱该如何养护?
  9. [Python] 字典 vars()函数:以字典类型提取对象的属性和属性值
  10. clickhouse分布式DDL查询
  11. 关于Android开发中出现 NoClassDefFoundError
  12. 一个离线的简单的 JSON 格式化编辑器
  13. CodeForces 1457C Bouncing Ball
  14. R语言--for循环语句的使用
  15. TIOBE 5月编程语言排行:Python再次挤掉Java,夺下榜二!
  16. 吐血推荐cookie和session
  17. 极点输入法如何关闭单过了模式
  18. thymleaf对实体 “pageindex“ 的引用必须以 ‘;‘ 分隔符结尾
  19. Matlab信号处理笔记
  20. LOAM-FLMI考试

热门文章

  1. BZOJ4771 七彩树(dfs序+树上差分+主席树)
  2. aspnet_regiis.exe -i 执行报错
  3. PL/SQL程序设计(一)—— PL/SQL程序设计简介
  4. BZOJ 2179 [快速傅里叶变换 高精度乘法]
  5. Android中Cursor类的概念和用法
  6. spark 存储机制详解
  7. POJ1063 Flip and Shift
  8. 【SRX】RE与PFE策略不同步,导致Commit失败-----案例分析
  9. Struts初步知识
  10. CSS 布局与“仓库管理”的关系