8.读写锁ReadWriteLock
/*ReadWriteLock 读写锁*/
private ReadWriteLock lock = new ReentrantReadWriteLock();
lock.readLock().lock(); lock.writeLock().lock();
ReadWriteLock 维护了 /*一对*/ 相关的锁,一个用于只读操作,另一个用于写入操作
只要没有writer,读取锁可以由多个 reader 线程同时保持。写入锁是独占的
ReadWriteLock 读取操作通常不会改变共享资源,但执行写入操作时,必须是独占的方式来获取锁。对于读取操作占多数的数据结构。
ReadWriteLock 能提供比独占锁更高的并发性。而对于只读的数据结构,其中包含的不变性可以完全不需要考虑加锁操作
/*
* 1.ReadWriterLock : 读写锁
*
* 写写 /读写 需要 “互斥”
* 读读 不需要互斥
* */ public class TestReadWriteLock { public static void main(String[] args) {
//匿名内部类 使用外部的参数 需要加上 final (1.8之后就不需要了 ,但是也不能修改)
//这和外部参数的生命周期有关
final ReadWriteLockThread lt = new ReadWriteLockThread(); //创建一个 ‘写’ 线程
new Thread(new Runnable() {
@Override
public void run() {
lt.write(10);
}
},"write").start(); ////创建100个 ‘读’ 线程
for(int i = 0;i<100;i++) { new Thread(new Runnable() {
@Override
public void run() {
lt.read();
}
},"read").start();
}
}
}
class ReadWriteLockThread {
private int number = 1;
private ReadWriteLock lock = new ReentrantReadWriteLock(); public void read() {
lock.readLock().lock();
try {
System.out.println(number);
} finally {
lock.readLock().unlock();
} } public void write(int number) {
lock.writeLock().lock();
try {
System.out.println(this.number);
this.number = number;
} finally {
lock.writeLock().unlock();
}
}
}
8.读写锁ReadWriteLock的更多相关文章
- 线程中的读写锁ReadWriteLock
Lock锁还有两个非常强大的类 ReadWriteLock接口实现类ReentrantReadWriteLock(非常重要的锁) 想实现 读取的时候允许多线程并发访问,写入的时候不允许. 这种效果.. ...
- 显式锁(三)读写锁ReadWriteLock
前言: 上一篇文章,已经很详细地介绍了 显式锁Lock 以及 其常用的实现方式- - ReetrantLock(重入锁),本文将介绍另一种显式锁 - - 读写锁ReadWriteLock. ...
- 【漫画】互斥锁ReentrantLock不好用?试试读写锁ReadWriteLock
ReentrantLock完美实现了互斥,完美解决了并发问题.但是却意外发现它对于读多写少的场景效率实在不行.此时ReentrantReadWriteLock来救场了!一种适用于读多写少场景的锁,可以 ...
- 【漫画】读写锁ReadWriteLock还是不够快?再试试StampedLock!
本文来源于公众号[胖滚猪学编程] 转载请注明出处! 在互斥锁ReentrantLock不好用?试试读写锁ReadWriteLock一文中,我们对比了互斥锁ReentrantLock和读写锁ReadWr ...
- 读-写锁 ReadWriteLock & 线程八锁
读-写锁 ReadWriteLock: ①ReadWriteLock 维护了一对相关的锁,一个用于只读操作, 另一个用于写入操作. 只要没有 writer,读取锁可以由 多个 reader 线程同时保 ...
- C# 多线程编程之锁的使用【互斥锁(lock)和读写锁(ReadWriteLock)】
多线程编程之锁的使用[互斥锁(lock)和读写锁(ReadWriteLock)] http://blog.csdn.net/sqqyq/article/details/18651335 多线程程序写日 ...
- Java 读写锁 ReadWriteLock 原理与应用场景详解
Java并发编程提供了读写锁,主要用于读多写少的场景,今天我就重点来讲解读写锁的底层实现原理@mikechen 什么是读写锁? 读写锁并不是JAVA所特有的读写锁(Readers-Writer Loc ...
- 读写锁ReadWriteLock和缓存实例
读写锁:多个读锁不互斥,读锁与写锁互斥,写锁与写锁互斥.即:读的时候不允许写,写的时候不允许读,可以同时读. synchronized关键字和普通的Lock构造的锁,会造成读与读之间的互斥, ...
- java读写锁ReadWriteLock
package com.java.concurrent; import java.util.concurrent.locks.ReadWriteLock; import java.util.concu ...
- 读写锁ReadWriteLock
为了提高性能,Java提供了读写锁,在读的地方使用读锁,在写的地方使用写锁,灵活控制,如果没有写锁的情况下,读是无阻塞的,在一定程度上提高了程序的执行效率. Java中读写锁有个接口java.util ...
随机推荐
- Jmeter响应断言--正则表达式判断纯数字
如图所示,这样是匹配14位数字,如果响应是纯数字可以直接用上
- CentOS7下搭建SVN服务器
(1).安装SVN 1)安装SVN [root@youxi1 ~]# yum -y install subversion mod_dav_svn [root@youxi1 ~]# cat /etc/s ...
- PAT 甲级 1046 Shortest Distance (20 分)(前缀和,想了一会儿)
1046 Shortest Distance (20 分) The task is really simple: given N exits on a highway which forms a ...
- iOS 越狱后OpenSSH安装报错
转载自:https://www.jianshu.com/p/75f6d0f54d61 安装OpenSSH报错 尝试重启手机重新安装 将手机语言设置为英文状态 将手机设置为飞行模式,用wifi下载(我的 ...
- 树形DP入门学习
这里是学习韦神的6道入门树形dp进行入门,本来应放在day12&&13里,但感觉这个应该单独放出来好点. 这里大部分题目都是参考的韦神的思想. A - Anniversary part ...
- Redis源码解析
一.src/server.c 中的redisCommandTable列出的所有redis支持的命令,其中字符串命令包括从get到mget:列表命令从rpush到rpoplpush:集合命令包括从sad ...
- 解决移动端1px的问题,设备像素比devicePixelRatio的应用
本文主要针对移动端1物理像素问题展开 解决这个问题先要了解一下概念: CSS像素(CSS Pixel):(通俗说:样式中写的值)就是我们在样式代码中常写的逻辑像素,是一个抽象概念,实际并不存在 设备独 ...
- JS通过ActiveX读写ini配置文件
String.prototype.trim = function(){ return this.replace(/(^\s+)|(\s+$)/g, ''); }; IniConfig = functi ...
- C语言程序设计II—第十一周教学
第十一周教学总结(6/5-12/5) 教学内容 本周的教学内容为:10.1 知识点:多个函数构成的程序结构.10.2 递归函数.10.3编译预处理概念,包括文件.宏的内容.10.4 多文件模块的学生信 ...
- Java面试 - 重载(Overload)和重写(Override)的区别?
1.重载是在同一个类中,可声明多个同名方法,但参数列表不同(参数顺序,个数,类型).而重写是在子类中,对从父类中继承的方法进行重新编写,但方法名,参数列表(参数顺序,个数,类型),返回值类型必须保持一 ...