Toc
  1. 使用注意
  2. ReentrantLock 和 Synchronized 对比
Toc
0 results found
BOBO
ReentrantLock
2020/09/08 Java基础

ReentrantLock 是 Lock 的默认实现

使用注意

  1. lock()方法和 unlock()方法需要成对出现,锁了几次,也要释放几次,否则后面的线程无法获取锁 了;可以将 add 中的 unlock 删除一个事实,上面代码运行将无法结束
  2. unlock()方法放在 finally 中执行,保证不管程序是否有异常,锁必定会释放
  3. ReentrankLock 中必须使用实例方法 lockInterruptibly() 获取锁时,在线程调用 interrupt() 方法之后,才会引发 InterruptedException 异常
  4. 线程调用 interrupt()之后,线程的中断标志会被置为 true
  5. 触发 InterruptedException 异常之后,线程的中断标志有会被清空,即置为 false 4. 所以当线程调用 interrupt()引发 InterruptedException 异常,中断标志的变化是:false->true- >false

ReentrantLock 和 Synchronized 对比

  1. 可重入锁:可重入锁是指同一个线程可以多次获得同一把锁;ReentrantLock 和关键字 Synchronized 都是可重入锁
  2. 可中断锁:可中断锁时只线程在获取锁的过程中,是否可以相应线程中断操作。synchronized 是 不可中断的,ReentrantLock 是可中断的
  3. 公平锁和非公平锁:公平锁是指多个线程尝试获取同一把锁的时候,获取锁的顺序按照线程到达的 先后顺序获取,而不是随机插队的方式获取。synchronized 是非公平锁,而 ReentrantLock 是两种 都可以实现,不过默认是非公平锁
支付宝
微信
Simple is Awesome