java多线程:并发包中ReentrantReadWriteLock读写锁的锁降级模板 写锁降级为读锁

来源:互联网 发布:阿里云快照欠费 编辑:程序博客网 时间:2024/06/06 00:43
写锁降级为读锁,但读锁不可升级或降级为写锁。
锁降级是为了让当前线程感知到数据的变化。
复制代码
 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   }
阅读全文
0 0
原创粉丝点击