/*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的更多相关文章

  1. 线程中的读写锁ReadWriteLock

    Lock锁还有两个非常强大的类 ReadWriteLock接口实现类ReentrantReadWriteLock(非常重要的锁) 想实现 读取的时候允许多线程并发访问,写入的时候不允许. 这种效果.. ...

  2. 显式锁(三)读写锁ReadWriteLock

    前言:   上一篇文章,已经很详细地介绍了 显式锁Lock 以及 其常用的实现方式- - ReetrantLock(重入锁),本文将介绍另一种显式锁 - - 读写锁ReadWriteLock.    ...

  3. 【漫画】互斥锁ReentrantLock不好用?试试读写锁ReadWriteLock

    ReentrantLock完美实现了互斥,完美解决了并发问题.但是却意外发现它对于读多写少的场景效率实在不行.此时ReentrantReadWriteLock来救场了!一种适用于读多写少场景的锁,可以 ...

  4. 【漫画】读写锁ReadWriteLock还是不够快?再试试StampedLock!

    本文来源于公众号[胖滚猪学编程] 转载请注明出处! 在互斥锁ReentrantLock不好用?试试读写锁ReadWriteLock一文中,我们对比了互斥锁ReentrantLock和读写锁ReadWr ...

  5. 读-写锁 ReadWriteLock & 线程八锁

    读-写锁 ReadWriteLock: ①ReadWriteLock 维护了一对相关的锁,一个用于只读操作, 另一个用于写入操作. 只要没有 writer,读取锁可以由 多个 reader 线程同时保 ...

  6. C# 多线程编程之锁的使用【互斥锁(lock)和读写锁(ReadWriteLock)】

    多线程编程之锁的使用[互斥锁(lock)和读写锁(ReadWriteLock)] http://blog.csdn.net/sqqyq/article/details/18651335 多线程程序写日 ...

  7. Java 读写锁 ReadWriteLock 原理与应用场景详解

    Java并发编程提供了读写锁,主要用于读多写少的场景,今天我就重点来讲解读写锁的底层实现原理@mikechen 什么是读写锁? 读写锁并不是JAVA所特有的读写锁(Readers-Writer Loc ...

  8. 读写锁ReadWriteLock和缓存实例

    读写锁:多个读锁不互斥,读锁与写锁互斥,写锁与写锁互斥.即:读的时候不允许写,写的时候不允许读,可以同时读.      synchronized关键字和普通的Lock构造的锁,会造成读与读之间的互斥, ...

  9. java读写锁ReadWriteLock

    package com.java.concurrent; import java.util.concurrent.locks.ReadWriteLock; import java.util.concu ...

  10. 读写锁ReadWriteLock

    为了提高性能,Java提供了读写锁,在读的地方使用读锁,在写的地方使用写锁,灵活控制,如果没有写锁的情况下,读是无阻塞的,在一定程度上提高了程序的执行效率. Java中读写锁有个接口java.util ...

随机推荐

  1. 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_02-用户认证技术方案-单点登录

    2 用户认证技术方案 2.1 单点登录技术方案 分布式系统要实现单点登录,通常将认证系统独立抽取出来,并且将用户身份信息存储在单独的存储介质,比如: MySQL.Redis,考虑性能要求,通常存储在R ...

  2. CentOS7下配置Tomcat以APR模式+Tomcat Native运行

    在慢速网络上Tomcat线程数开到300以上的水平,不配APR,基本上300个线程狠快就会用满,以后的请求就只好等待.但是配上APR之后,Tomcat将以JNI的形式调用Apache HTTP服务器的 ...

  3. JQuery.BlockUI使用方法举例

    JQuery.BlockUI是众多JQuery插件弹出层中的一个,它小巧(原版16k,压缩后10左右),容易使用, 功能齐全,支持Iframe,支持Modal,可定制性高也意味他默认谦虚的外表. jQ ...

  4. react ant design TreeNode——树形菜单笔记

     2017-12-04补充说明——树形菜单版本号2.x 设置默认该树形组件展开(默认展开所有树节点) 参考文档的写法: defaultExpandAll={true} //经过测试并不生效, 另外注意 ...

  5. redcon, Redis兼容的服务器框架

    源代码名称:redcon 源代码网址:http://www.github.com/tidwall/redcon redcon源代码文档 redcon源代码下载 Git URL: 复制代码 git:// ...

  6. java 画图 Graphics 文字自动换行

    /** * 文字超出限定长度自动换行 * * @param g 画布 * @param font 字体样式 * @param text 文字 * @param widthLength 最大长度 (多少 ...

  7. linux环境上 rocketmq 安装部署

    Rocketmq-简单部署   一.准备环境 1.系统:Centos7.3(无硬性要求) 2. jdk:1.8 3.maven:3.5(无硬性要求) 4.git 5.rocketmq 4.2 二.环境 ...

  8. Oracle 数据库 alert日志及trace日志的清理

    Oracle 数据库 alert日志及trace日志的清理 方案一: 暂停数据库的trace 登录到数据库 sqlplus / as sysdba 修改参数: SQL> alter system ...

  9. C语言位操作中指定的某一位数置0、置1、取反

    一.指定的某一位数置1 宏 #define setbit(x,y)  x|=(1<<y) 二.指定的某一位数置0 宏  #define clrbit(x,y)  x&=~(1< ...

  10. Jmeter逻辑控制器: If控制器的解读

    Jmeter官网其实有很详细的文档,点此跳转到官网,下面我来解读一下官网的文档,如有错误,欢迎指出. 一.官网解读 Name 在结果树中显示的名字. Comments 备注.相当于代码中的注释. Ex ...