zoukankan      html  css  js  c++  java
  • java多线程:并发包中ReentrantReadWriteLock读写锁的锁降级模板

    写锁降级为读锁,但读锁不可升级或降级为写锁。
    锁降级是为了让当前线程感知到数据的变化。
     1  //读写锁
     2     private ReentrantReadWriteLock lock=new ReentrantReadWriteLock();
     3     //读锁
     4     private ReadLock readLock=lock.readLock();
     5     //写锁
     6     private WriteLock writeLock=lock.writeLock();
     7     private boolean update;
     8     
     9   public void processData(){
    10       //读锁获取
    11       readLock.lock();
    12       
    13       if(!update){
    14           //必须先释放读锁
    15           readLock.unlock();
    16           
    17           //锁降级从获取写锁开始
    18           writeLock.lock();
    19           try {
    20                   if(!update){
    21                       //准备数据流程(略)
    22                       update=true;
    23                   }
    24                   //获取读锁。在写锁持有期间获取读锁
    25                   //此处获取读锁,是为了防止,当释放写锁后,又有一个线程T获取锁,对数据进行改变,而当前线程下面对改变的数据无法感知。
    26                   //如果获取了读锁,则线程T则被阻塞,直到当前线程释放了读锁,那个T线程才有可能获取写锁。
    27                   readLock.lock();
    28               }finally{
    29                   //释放写锁
    30                   writeLock.unlock();
    31               }
    32           //锁降级完成
    33       }
    34       
    35       try {
    36           //使用数据的流程
    37       } finally{
    38           //释放读锁
    39           readLock.unlock();
    40       }
    41       
    42   }
    View Code
  • 相关阅读:
    获取css信息
    html嵌套规则
    js获取ip地址
    match excel test search replace 用法
    js 宽和高
    判断类型 从零开始系列
    js随机数 从头开始系列
    苹果自带拼音转换方法
    iOS GCD 拾遗
    iOS用户响应者链的那些事儿
  • 原文地址:https://www.cnblogs.com/shangxiaofei/p/5807692.html
Copyright © 2011-2022 走看看