ReadWriteLock同Lock一样也是一个接口,提供了readLock和writeLock两种锁的操作机制,一个是只读的锁,一个是写锁
 
aaarticlea/png;base64,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" alt="" />      
 
 
互斥原则:
读-读能共存,
读-写不能共存,
写-写不能共存。
 
 
 

package com.wf.zhang.juc;

import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock; /**
* ReadWritelock 读写锁
*
*
* 写写/读写 需要"互斥"
*
* 读读 不需要互斥
*/
public class TestReadWriterlock { public static void main(String[] args) {
ReadWriterlockDemo rw = new ReadWriterlockDemo();
//一个线程写
new Thread(new Runnable() {
@Override
public void run() {
rw.set((int) (Math.random() * 101));
}
},"写锁").start(); //100个线程读
for (int i = 0; i <=100; i++) { new Thread(new Runnable() {
@Override
public void run() {
rw.get();
}
}).start();
} }
} class ReadWriterlockDemo { private int number = 0; private ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); //读
public void get() {
readWriteLock.readLock().lock();
try { System.out.println(Thread.currentThread().getName() + " 读" + number);
} finally {
readWriteLock.readLock().unlock();
}
} //写
public void set(int number) {
this.number = number;
readWriteLock.writeLock().lock();
try { System.out.println(Thread.currentThread().getName() + " 写 " +number);
} finally {
readWriteLock.writeLock().unlock();
}
}
}

JUC-10-ReadWriteLock读写锁的更多相关文章

  1. 12. ReadWriteLock 读写锁

    package com.gf.demo11; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent. ...

  2. ReadWriteLock读写锁(八)

    前言:在JUC ReentrantReadWriteLock是基于AQS实现的读写锁实现. ReadWriteLock中定义了读写锁需要实现的接口,具体定义如下: public interface R ...

  3. java多线程 -- ReadWriteLock 读写锁

    写一条线程,读多条线程能够提升效率. 写写/读写 需要“互斥”;读读 不需要互斥. ReadWriteLock 维护了一对相关的锁,一个用于只读操作,另一个用于写入操作.只要没有 writer,读取锁 ...

  4. GUC-9 ReadWriteLock : 读写锁

    import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWrit ...

  5. ReadWriteLock: 读写锁

    ReadWriteLock: 读写锁 ReadWriteLock: JDK1.5提供的读写分离锁,采用读写锁分离可以有效帮助减少锁竞争. 特点: 1).使用读写锁.当线程只进行读操作时,可以允许多个线 ...

  6. 22.ReadWriteLock读写锁

    import java.util.Random; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.R ...

  7. Java并发:ReadWriteLock 读写锁

    读写锁在同一时刻可以允许多个线程访问,但是在写线程访问,所有的读线程和其他写线程均被阻塞. 读写锁不像 ReentrantLock 那些排它锁只允许在同一时刻只允许一个线程进行访问,读写锁可以允许多个 ...

  8. 【转】java并发编程系列之ReadWriteLock读写锁的使用

    前面我们讲解了Lock的使用,下面我们来讲解一下ReadWriteLock锁的使用,顾明思义,读写锁在读的时候,上读锁,在写的时候,上写锁,这样就很巧妙的解决synchronized的一个性能问题:读 ...

  9. Java多线程之ReadWriteLock读写锁简介与使用教程

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6558073.html  普通的锁在对某一内容加锁后,其他线程是不能访问的.但是我们要考虑这种情况:如果当前加锁 ...

  10. ReadWriteLock 读写锁(读书笔记)

     读写分离锁可以有效的帮助减少锁的竞争,提升系统的效率, 读-读不互斥 读读之间不阻塞 读-写互斥 读阻塞写,写也会阻塞读 写-写互斥 写写阻塞 在系统中,读操作次数远远大于写操作,则读写锁就可以发挥 ...

随机推荐

  1. 从Asp .net到Asp core (第二篇)《Asp Core 的生命周期》

    前面一篇文章简单回顾了Asp .net的生命周期,也简单提到了Asp .net与Asp Core 的区别,我们说Asp Core不在使用Asp.netRuntime,所以它也没有了web程序生命周期中 ...

  2. [转帖]龙芯3A/3B3000通用处理器出货超30万 获得“中国芯”大奖

    龙芯3A/3B3000通用处理器出货超30万 获得“中国芯”大奖 http://www.eetop.cn/cpu_soc/6946247.html 2019.10 的新闻 出后量 30万 我们贡献了 ...

  3. php中的__get和__set方法

    1.__get() 作用:当实例化对象调用一个没有定义的属性时,会自动调用__get()方法 当实例化对象调用一个私有或者受保护的属性时,也会调用这个方法,方式类似 结果是:你访问的公开属性:name ...

  4. 下载安装GO,编辑器GOLand和在GOLand上运行项目的几种方式

    下载安装GO 下载GO地址:https://golang.google.cn/dl/,一直下一步下一步的操作. 安装完成之后,会有一个GOPATH(此路径是创建go项目的时候会自动在该文件夹下创建), ...

  5. SAS学习笔记63 如何导出Log

    如上,将Log输出,然后又恢复到SAS系统里面的Log,把需要运行的程序放到他们中间就可以了.这种方法不会出现Log打印满了的情况 这种是先输出在SAS系统里面,然后在输出,在SAS里面Log的行是有 ...

  6. HuTool之判断上传文件的文件类型

    文件类型判断-FileTypeUtil 由来 在文件上传时,有时候我们需要判断文件类型.但是又不能简单的通过扩展名来判断(防止恶意脚本等通过上传到服务器上),于是我们需要在服务端通过读取文件的首部几个 ...

  7. CORS讲解

    跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器  让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源.当一个资源从与该资 ...

  8. DevExtreme学习笔记(一) DataGrid中数据筛选

    config.filterRow = { visible: true, applyFilter: "auto" }; config.headerFilter = { visible ...

  9. MySQL5.7.16安装及配置

    一.下载 下载页面http://dev.mysql.com/downloads/mysql/ 选择系统平台后,点击download(根据系统选择64或32位) 二.配置 1.下载成功后,解压安装包到要 ...

  10. ActiveMQ Topic持久化订阅的几点收获

    非持久化模式下,Topic不会落地任何消息,消息入队即出队, 消费者如果想要保留离线后的消息需要告诉MQ实例,即注册过程, 代码上大概是这样的: connectionFactory = new Act ...