zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    java——testNG——工作复习——xml详解
    转义符,re模块,rangdom随机数模块,
    nyoj 814又见拦截导弹
    Soj题目分类
    Xcode 性能优化
    python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法(pip使用豆瓣源)
    浅谈模拟退火
    43-正则表达式(1)
    命令行上的narrowing(随着输入逐步减少备选项)工具
    有效决策,这么做就对了!
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7429166.html
Copyright © 2011-2022 走看看