读写锁的由奢入俭“易”
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();}
}
读写锁的由奢入俭“易”相关推荐
- 由俭入奢易,由奢入俭难
勤俭就是勤劳节俭,包括努力工作和节约用度两个重要方面.我国自古就以勤俭作为修身治家治国 的美德,<尚书>说:"惟日孜孜,无敢逸豫."<左传>引古语说:&qu ...
- 常⻅锁策略(1. 乐观锁 悲观锁2. 公平锁 非公平锁3. 读写锁4. 可重入锁 自旋锁)
目录 1. 乐观锁 & 悲观锁 1.1乐观锁定义 1.2 乐观锁实现 -- CAS 1.3 悲观锁定义和应⽤ 2. 公平锁 & 非公平锁 3. 读写锁 3.1 读写锁 3.2 独占锁 ...
- 并发编程-19AQS同步组件之重入锁ReentrantLock、 读写锁ReentrantReadWriteLock、Condition
文章目录 J.U.C脑图 ReentrantLock概述 ReentrantLock 常用方法 synchronized 和 ReentrantLock的比较 ReentrantLock示例 读写锁R ...
- 聊聊高并发(二十八)解析java.util.concurrent各个组件(十) 理解ReentrantReadWriteLock可重入读-写锁
这篇讲讲ReentrantReadWriteLock可重入读写锁,它不仅是读写锁的实现,并且支持可重入性. 聊聊高并发(十五)实现一个简单的读-写锁(共享-排他锁) 这篇讲了如何模拟一个读写锁. 可重 ...
- 并发锁之二:ReentrantReadWriteLock读写锁
一.简介 读写锁是一种特殊的自旋锁,它把对共享资源对访问者划分成了读者和写者,读者只对共享资源进行访问,写者则是对共享资源进行写操作.读写锁在ReentrantLock上进行了拓展使得该锁更适合读操作 ...
- java 读写锁_Java中的读写锁
一.读写锁 1.初识读写锁 a)Java中的锁--Lock和synchronized中介绍的ReentrantLock和synchronized基本上都是排它锁,意味着这些锁在同一时刻只允许一个线程进 ...
- java锁(公平锁和非公平锁、可重入锁(又名递归锁)、自旋锁、独占锁(写)/共享锁(读)/互斥锁、读写锁)
前言 本文对Java的一些锁的概念和实现做个整理,涉及:公平锁和非公平锁.可重入锁(又名递归锁).自旋锁.独占锁(写)/共享锁(读)/互斥锁.读写锁 公平锁和非公平锁 概念 公平锁是指多个线程按照申请 ...
- 谈谈java并发锁(重入锁、读写锁、公平锁)
目录 重入锁 简单重入锁 重入锁的等待通知(Condition) 多Condition 公平锁和非公平锁 读写锁ReentrantReadWriteLock 锁优化总结: 重入锁和读写锁,他们具有比s ...
- ReentrantReadWriteLock可重入读写锁分析
ReentrantReadWriteLock 可重入的读写锁 什么叫可重入:就是同一个线程可以重复加锁,可以对同一个锁加多次,每次释放的时候回释放一次,直到该线程加锁次数为0,这个线程才释放锁. 什么 ...
最新文章
- Async_Await;
- 365天里有300天都想辞职,换个公司,你的2019会更好吗?
- php页面时长,页面执行时间太长,请诸位大大帮忙看看
- CNN for Semantic Segmentation(语义分割,论文,代码,数据集,标注工具,blog)
- Linux系统编程---5(共享存储映射,存储映射I/O,mmap函数,父子进程间通信,匿名映射)
- windows7系统设置动态屏保的教程
- Apache Beam的API设计
- 变速更顺滑_CVT变速箱中的小弱鸡?10万公里必坏?变速箱该如何养护?
- [Python] 字典 vars()函数:以字典类型提取对象的属性和属性值
- clickhouse分布式DDL查询
- 关于Android开发中出现 NoClassDefFoundError
- 一个离线的简单的 JSON 格式化编辑器
- CodeForces 1457C Bouncing Ball
- R语言--for循环语句的使用
- TIOBE 5月编程语言排行:Python再次挤掉Java,夺下榜二!
- 吐血推荐cookie和session
- 极点输入法如何关闭单过了模式
- thymleaf对实体 “pageindex“ 的引用必须以 ‘;‘ 分隔符结尾
- Matlab信号处理笔记
- LOAM-FLMI考试