0
点赞
收藏
分享

微信扫一扫

synchronized与ReentrantLock区别与联系

1.有了synchronized为什么会出现ReentrantLock

synchronized也有一定的局限性,例如:

  1. 当线程尝试获取锁的时候,如果获取不到锁会一直阻塞,这个阻塞的过程,用户无法控制
  2. 如果获取锁的线程进入休眠或者阻塞,除非当前线程异常,否则其他线程尝试获取锁必须一直等待
2.三个方面比较
  1. 可重入锁:可重入锁是指同一个线程可以多次获得同一把锁;ReentrantLock和关键字Synchronized都是可重入锁
  2. 可中断锁:可中断锁时子线程在获取锁的过程中,是否可以相应线程中断操作。synchronized是不可中断的,ReentrantLock是可中断的
  3. 公平锁和非公平锁:公平锁是指多个线程尝试获取同一把锁的时候,获取锁的顺序按照线程到达的先后顺序获取,而不是随机插队的方式获取。synchronized是非公平锁,而ReentrantLock是两种都可以实现,不过默认是非公平锁

ReentrantLock常用的方法

  1. isHeldByCurrentThread:实例方法,判断当前线程是否持有ReentrantLock的锁

获取锁的4种方法对比

获取锁的方法

是否立即响应(不会阻塞)

是否响应中断

lock()

×

×

lockInterruptibly()

×


tryLock()


×

tryLock(long timeout, TimeUnit unit)

×


举报

相关推荐

0 条评论