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. android 8.0 以后 uiautomator 无法直接使用的问题

    android8.1以后sdk tools自带的uiautomator直接打开,截取不到机器界面信息. 可以使用以下方法手动截取. 首先操作机器定位到要分析的界面. 1.截取uix资源文件 adb s ...

  2. python技巧 — pip install 错误,超时

    jieba库安装失败   pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jieba wordcloud库安装失败 pip instal ...

  3. PAT(B) 1045 快速排序(C)

    题目链接:1045 快速排序 (25 point(s)) 参考博客:1045 快速排序 (25 point(s))繁星蓝雨 题目描述 著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一 ...

  4. SVN:修改文件后提示感叹号消失了处理办法

    使用SVN发现文件修改后,默认的修改标记红色感叹号不见了 重新显示设置方法: [右键]——[TortoiseSVN]——[Setting] 在[Icon Overlays]中选择[Default]即可 ...

  5. gin - 读取Body后再次赋值

    这样就不影响后面读取了

  6. PHP CLI中,三个系统常量:STDIN、STDOUT、STDERR

    PHP CLI中,有三个系统常量,分别是STDIN.STDOUT.STDERR,代表文件句柄. /** *@ 标准输入 *@ php://stdin & STDIN *@ STDIN是一个文件 ...

  7. Android--打开指定程序(微博/微信/QQ等)

    Intent intent = new Intent(); ComponentName cmp = new ComponentName("com.sina.weibo"," ...

  8. Js学习01--基础知识

    一. JavaScript有三种书写格式 1.行内式 <button onclick = 'alert('nice day!');'>Nice Day</button> 2. ...

  9. kafka服务端实验记录

    kafka单机实验: 环境准备: 1.下载kafka,zookeeper,并解压 wget http://mirror.bit.edu.cn/apache/kafka/2.3.0/kafka_2.11 ...

  10. SpringBoot指定额外需要扫描的包

    我们都知道,SpringBoot主启动类标注了@SpringBootApplication注解,该注解引入了@ComponentScan注解 所以默认的包扫描规则是,程序会自动扫描主启动类所在包及其子 ...