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. was8.5调用HttpPost使用httpClient-4.5.1.jar与was原生自带jar包冲突

    一.更换jar方法. 1.将httpClient4.5.1.jar包去掉,更换使用commons-httpclient-3.1.jar. 2.更换方法,将HttpPost类转换为PostMethod类 ...

  2. 阿里的Netty知识点你又了解多少

    前言 Netty 是一个可以快速开发网络应用程序的 NIO 框架,它大大简化了 TCP 或者 UDP 服务器的网络编程.Netty 的简易和快速开发并不意味着由它开发的程序将失去可维护性或者存在性能问 ...

  3. javascript——常用事件总结

      Event对象:Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 事件标签属性 当以下情况发生时,出现此事件 onabort 图像加载被中断 ...

  4. python大道——博客目录

      python基础 第一章 计算机基础 计算机基础 第二章 python基础语法 python入门 第三章 基础数据类型和文件操作 整型.布尔.字符串 列表.字典.集合 公共功能.小数据池 hash ...

  5. MAC 添加Jmeter环境变量

    vim ./bash_profile JMETER_HOME=/Users/finup/apache-jmeter-5.1.1 CLASSPATH=$JAVA_HOME/lib/tools.jar:$ ...

  6. Jenkins安装maven integration plugin失败解决方法

    最近装了一个jenkins准备搞一个自动化测试的持续集成,但是在安装maven integration这个插件时报错,试了几次都是失败! 错误原因如下: javadoc安装失败: java.io.IO ...

  7. Oracle中的dual表简介

    dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录.我们可以用它来做很多事情,如下: 1.查看当前用户,可以在 SQL Plus中执行下面语句 sql代 ...

  8. WPF内嵌网页的两种方式

    在wpf程序中,有时会内嵌网页.内嵌网页有两种方法,一种是使用wpf自带WebBrowser控件来调用IE内核,另一种是使用CefSharp包来调用chrom内核. 一.第一种使用自带WebBrows ...

  9. Excel默认去除开头的0

    用户反映打开的.xls文档打开时,excel会默认把某些以0开头零件号去零,导致数据丢失. 解决办法: 先用记事本打开,然后把EXCEL的单元格格式设为文本格式,再把数据复制过去就可以了. 或者先打开 ...

  10. Linux用户管理的基本概念

    Linux系统如何区别不同的用户呢?可以很自然地想到,使用不同的用户名应该是一个好主意,就像真实世界中每个人都有名字一样.但“用户名”只是一种方便让人读的字符串,对机器来说是没有意义的.事实上,Lin ...