首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

带你搞懂Java多线程(五)

synchronized的缺点

  • 获取synchronized关键字的锁不能中断
  • 没有尝试获取锁的机制

Lock接口和核心方法

Lock(显示锁)

Lock是一个接口,只能手动的获取和释放锁,属于Java语法层面的锁,解决了synchronized的缺点注意 使用lock.lock()后,应将lock.unlock();放在finally中;

代码语言:javascript
复制
public void add(){
  lock.lock();
   try{
    count++;
    }finally{
      lock.unlock();
    }
}

可重入锁ReentrantLock

允许一个线程反复多次的去拿同一把锁。 递归调用的时候,防止一个线程自己把自己锁死。

锁的公平和非公平

  • 公平锁,当多个线程申请同一把锁的时候,先申请的先拿到。
  • 非公平锁,当多个线程申请同一把锁的时候,可能后申请的反而先拿到锁。

哪个更好

性能上非公平锁比公平锁性能更好,因为如果是公平锁,线程拿不到锁会挂起,而线程挂起导致的上下文切换会浪费时间周期。

下一篇
举报
领券