StampedLock的使用

由于ReadWriteLock存在严重的性能问题,甚至在很多情况下比synchronized要慢,Java8新出了StampedLock,这个锁不仅更快,而且它提供强大的乐观锁API,这意味着你能以一个较低的代价获得一个读锁, 在这段时间希望没有写操作发生,当这段时间完成后,你可以查询一下锁,看是否在刚才这段时间是否有写操作发生?然后你可以决定是否需要再试一次 或升级锁或放弃。

悲观用法

悲观用法和ReadWriteLock很类似,try前lock,finally 里unlock。

long stamp = lock.writeLock(); //blocking lock, returns a stamp
try {
    write(stamp); // this is a bad move, you’re letting the stamp escape
} finally {
    lock.unlock(stamp);// release the lock in the same block - way better
}
乐观用法

先尝试读,读完检查有没有写操作发送,如果有则获取悲观锁并重读。

long stamp = lock.tryOptimisticRead(); // non blocking
read();
if(!lock.validate(stamp)){ // if a write occurred, try again with a read lock
    long stamp = lock.readLock();
    try {
       read();
    } finally {
       lock.unlock(stamp);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值