显示锁和synchronized的区别

28 篇文章 1 订阅
10 篇文章 0 订阅

       这两种锁都是可重入锁。synchronized内置锁是一种非公平平锁排它锁,是jdk1.8对它做了大量的优化(偏向锁->轻量级锁->重量级锁),所以在没有特殊用途的情况下建议使用synchronized关键字(java语言内置的,加锁释放锁都是已经固化好的我们不需要处理,显示锁是语法层面的锁,有一个固定的范式)。

       显示锁有一个固定的结构jdk源码给出的示例如下:

class X {
      private final ReentrantLock lock = new ReentrantLock();
      // ...
     public void m() {
           lock.lock();
           try {
                // ... method body
            } finally {
                  lock.unlock()
            }
      }
  }

即显示锁搭配try{....}finally{..} 语句使用确保锁,不管发生什么情况都能关闭,

注:当一个线程结束时,所持与的所有资源,锁都会释放掉。显示锁除了支持可重入外,还支持超时拿锁,响应中断等。

公平锁就绪线程按照公平策略(按请求顺序)依次等待获得锁,效率低

非公平锁无视等待队列,当锁处于闲置时就竞争获得锁,会出现插队的现象,效率高(线程的上线文切换会有一定的时间消耗,而非公平锁,可以充分的利用这些时间)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值