Java 读写锁范例 官方版

Java Api ReentranReadWriteLock 自带实例

代码:

class CachedData {
   Object data;
   volatile boolean cacheValid;
   ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();

   void processCachedData() {
     rwl.readLock().lock();//@1
     if (!cacheValid) {
        // 必须在写锁锁上前释放所有的读锁
        rwl.readLock().unlock();//@4
        rwl.writeLock().lock();//@2
        // 重新确认状态,防止其他线程介入先锁了线程并修改了状态
        if (!cacheValid) {//@3
          data = ...
          cacheValid = true;
        }
        // 读锁可以在写锁内被锁上
        rwl.readLock().lock();
        rwl.writeLock().unlock(); // 手动解锁写锁,读锁仍保持
     }

     use(data);
     rwl.readLock().unlock();
   }
 }

重点:

  1. 读锁是排写锁操作,但不排其他读锁的操作,多个读线程可并发
  2. 写锁是可以获得读锁的,但写锁锁下前要释放所有读锁
  3. 写锁必须在所有的读锁释放后才能锁
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值