/*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. 123456---com.twoapp.ErTongNongChangPinTu---儿童农场拼图

    com.twoapp.ErTongNongChangPinTu---儿童农场拼图

  2. ALV显示金额字段值扩大100倍

    内表数据 物料                  库位          期末庫存金額F0D7004DSA   1PYF       701410.944F0D7004DSA   1SNT      ...

  3. Ubuntu下配置LVS【h】

    以后服务器只用CentOS和Ubuntu.下午用redhat装个lvs装了一下午都没搞好,TNND的.果断用Ubuntu,不到两个小时就搞定了. 原文参见: http://kamengwang.blo ...

  4. Kotlin教程

    Kotlin是一种静态类型的编程语言,由JetBrains开发.如果你有Java的基础知识,你很快就能学会Kotlin.这个Kotlin教程是为初学者设计的,因此即使您不了解Java,也可以理解Kot ...

  5. Spring 使用单选按钮

    模型层需要提供数据选项,设置错误信息 关键代码 @NotNull(message = "请选择性别") private String gender; 控制器层需要在显示视图前,通过 ...

  6. kubespray部署k8s

    0.把外网的/usr/local/bin/*拷过来覆盖 1.把部署好的集群的 calicoctl cni-plugins-linux-amd64-v0.8.1.tgz kubeadm-v1.16.3- ...

  7. mysql中mysql数据库丢失报错Can't open the mysql.plugin table

    180720 10:00:54 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it. 18 ...

  8. 哈夫曼编解码压缩解压文件—C++实现

    前言 哈夫曼编码是一种贪心算法和二叉树结合的字符编码方式,具有广泛的应用背景,最直观的是文件压缩.本文主要讲述如何用哈夫曼编解码实现文件的压缩和解压,并给出代码实现. 哈夫曼编码的概念 哈夫曼树又称作 ...

  9. HTML 5 全局 contenteditable 属性

    contenteditable 可以将标签设置为可输入的input,textarea, 但是在ios上,点击或者点击很久input输入框才出来,兼容ios的方法是加一个   -webkit-user- ...

  10. Erlang:[笔记二,构建工具rebar之发布应用]

    概述 通过rebar可以发布rebar构建的erlang项目,生成可执行的二进制脚本文件,大大降低了执行应用的复杂度.该笔记Erlang环境为Erlang/OTP 19 ,以下适用于Eralng/OT ...