• 8.读写锁ReadWriteLock


    /*ReadWriteLock 读写锁*/

    private ReadWriteLock lock = new ReentrantReadWriteLock();

    lock.readLock().lock();    lock.writeLock().lock();

    ReadWriteLock 维护了 /*一对*/ 相关的锁,一个用于只读操作,另一个用于写入操作

    只要没有writer,读取锁可以由多个 reader 线程同时保持。写入锁是独占的


    ReadWriteLock 读取操作通常不会改变共享资源,但执行写入操作时,必须是独占的方式来获取锁。对于读取操作占多数的数据结构。

    ReadWriteLock 能提供比独占锁更高的并发性。而对于只读的数据结构,其中包含的不变性可以完全不需要考虑加锁操作

     1 /*
     2  * 1.ReadWriterLock : 读写锁
     3  * 
     4  * 写写 /读写 需要 “互斥”
     5  * 读读 不需要互斥
     6  * */
     7 
     8 public class TestReadWriteLock {
     9     
    10     public static void main(String[] args) {
    11         //匿名内部类 使用外部的参数 需要加上 final (1.8之后就不需要了 ,但是也不能修改)
    12         //这和外部参数的生命周期有关
    13          final ReadWriteLockThread lt = new ReadWriteLockThread();
    14         
    15         //创建一个 ‘写’ 线程
    16         new Thread(new Runnable() {
    17             @Override
    18             public void run() {
    19                 lt.write(10);
    20             }
    21         },"write").start();
    22         
    23         ////创建100个 ‘读’ 线程
    24         for(int i = 0;i<100;i++) {
    25             
    26             new Thread(new Runnable() {
    27                 @Override
    28                 public void run() {
    29                     lt.read();
    30                 }
    31             },"read").start();
    32         }
    33     }
    34 }
    35 class ReadWriteLockThread {
    36     private int number = 1;
    37     private ReadWriteLock lock = new ReentrantReadWriteLock();
    38 
    39     public void read() {
    40         lock.readLock().lock();
    41         try {
    42             System.out.println(number);
    43         } finally {
    44             lock.readLock().unlock();
    45         }
    46         
    47     }
    48     
    49     public void write(int number) {
    50         lock.writeLock().lock();
    51         try {
    52             System.out.println(this.number);
    53             this.number = number;
    54         } finally {
    55             lock.writeLock().unlock();
    56         }
    57     }
    58 }
  • 相关阅读:
    form表单重置、清空方法记录
    window location assign的使用
    简单易用的拾色器推荐
    display属性常用的四个值:block、inline、inline-block、none
    idea如何配置外部电脑访问本地项目
    Unity 2D相机公式换算(从其他博客上抄的)
    关于游戏逻辑模式的观点----谁调用谁
    Unity 角色场景传送功能
    Unity关于方法事件生命周期官方文档
    关于Unity物理事件的执行顺序的最新理解
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7429166.html
Copyright © 2020-2023  润新知