ReentrantLock

2019-07-17  本文已影响0人  6默默Welsh

获取公平锁
参考1
参考2
参考3
参考4
参考5
)

公平锁和非公平锁区别
自定义锁中的同步队列与等待队列
JAVA 线程状态 阻塞和等待 bloked 和 waiting 区别
阻塞与等待的区别
阻塞:当一个线程试图获取对象锁(非java.util.concurrent库中的锁,即synchronized),而该锁被其他线程持有,则该线程进入阻塞状态。它的特点是使用简单,由JVM调度器来决定唤醒自己,而不需要由另一个线程来显式唤醒自己,不响应中断。
等待:当一个线程等待另一个线程通知调度器一个条件时,该线程进入等待状态。它的特点是需要等待另一个线程显式地唤醒自己,实现灵活,语义更丰富,可响应中断。例如调用:Object.wait()、Thread.join()以及等待Lock或Condition。

需要强调的是虽然synchronized和JUC里的Lock都实现锁的功能,但线程进入的状态是不一样的。synchronized会让线程进入阻塞态,而JUC里的Lock是用LockSupport.park()/unpark()来实现阻塞/唤醒的,会让线程进入等待态。但话又说回来,虽然等锁时进入的状态不一样,但被唤醒后又都进入runnable态,从行为效果来看又是一样的。

如果出现异常或者出现中断,就会执行finally的取消线程的请求操作cancelAcquire()

interrupted() 作用是测试当前线程是否被中断(检查中断标志),返回一个boolean并清除中断状态,

Condition参考1
Condition参考2

上一篇下一篇

猜你喜欢

热点阅读