加入收藏 | 设为首页 |

ope体育电竞官网-Java面试题之lock、tryLock和finally

海外新闻 时间: 浏览:161 次

面试标题如下,关于lock、tryLock和finally 的了解。

针对上述每一个选项,咱们逐个剖析一下。

(1)从JDK 源码来看,lock 确实对错公正锁。

默许创立非公正锁,能够传入参数 true 创立公正锁。

试题中并没有传入参数,因而loope体育电竞官网-Java面试题之lock、tryLock和finallyck 对错公正锁。

(2)检查 finally 代码块中的 lock.unlock() 源码

如下JDK源码所示,lock.unlock() 存在抛出反常的状况。

比方,在没有lock() 成功的状况下,也便是当时线程没有获取到锁的状况下,调用unlock() 办法时,就会抛出反常。

正常的代码逻辑如下所示。

lock() 办法的调用在try 句子块之外,并且在lock() 办法和try 句子之间,不要加任何代码,防止抛出反常,导致 unlock() 办法没有履行到,锁无法开释。

(3)tryLock() 办法

Lock接口供给了另一种办法来获取锁,即tryLock()办法。跟lock()办法最大的不同是:线程运用tryLock()不能获取锁,tryLock(ope体育电竞官网-Java面试题之lock、tryLock和finally)会当即回来ope体育电竞官网-Java面试题之lock、tryLock和finally,它不会将线程置入休眠。tryLock()办法回来一个布尔值,trueope体育电竞官网-Java面试题之lock、tryLock和finally表明线程获取了锁,false表明没有获取锁。

tryLock() 办法无论如何都会当即回来,在拿不到锁时不会一向在那等候。

正常的代码逻辑,是对 lock.tryLock() 办法的回来值进行判别,依据回来值不同,履行不同的逻辑,防止获取锁失利的状况下,依然进行正常的事ope体育电竞官网-Java面试题之lock、tryLock和finally务逻辑处理。

if (lock.tryLock()) {

System.out.println(tName + "获取到锁!");

} else {

System.out.println(tName + "获取不到锁!");

return;

综上所述,因而本面试题的西兰空气清新剂正确选项是:B(由于 finally 句子块中的 lock.unlock() 办法存在抛出反常的可能性)。