[JAVA学习笔记-78]lockInterruptibly

xiaoxiao2021-02-28  114

lock()适用于锁获取操作不受中断影响的情况,此时可以忽略中断请求正常执行加锁操作,因为该操作仅仅记录了中断状态(通过Thread.currentThread().interrupt()操作,只是恢复了中断状态为true,并没有对中断进行响应)。如果要求被中断线程不能参与锁的竞争操作,则此时应该使用lockInterruptibly方法,一旦检测到中断请求,立即返回不再参与锁的竞争并且取消锁获取操作(即finally中的cancelAcquire操作) 【lockInterruptibly】 线程在尝试获取锁的过程中(挂起过程),允许响应中断,处理中断异常,进而退出锁的竞争。 在BlockingQueue的put/take操作中均使用此方法获取锁,推测其用意是尽量减少锁竞争的开销,一旦某个线程被中断,立即响应中断并结束,避免 线程长时间获取不到锁而挂起。
转载请注明原文地址: https://www.6miu.com/read-42486.html

最新回复(0)