养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

经典Java面试题:怎么检测一个线程是否拥有锁

时间:2024-11-03 05:40:30

在java.lang.Thread中有一个方法叫holdsLock(),它返回true如果当且仅当当前线程拥有某个具体对象的锁。

经典Java面试题:怎么检测一个线程是否拥有锁

工具/原料

Thread

holdsLock

方法/步骤

1、产生死锁的四个必要条件:互斥条件:一个资源每次只熹栳缂靖能被一个进程(线程)使用。请求与保持条件:一个进程(线程)因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:此进程(线程)已获得的茹霭庖褙资源,在末使用完之前,不能强行剥夺。循环等待条件:多个进程(线程)之间形成一种头尾相接的循环等待资源关系。

2、设法提供了基于同步块和wait()和notify()方法的属性的逻辑,如第一个答案所示,但他当时并不满意许多面试官期望得到他们认为最好的答案,他们会推动你继续寻找直到你放弃,或者你给他们他们想要的答案。

3、当wait()和notify()方法从非垠捎吨稍同步上下文中调用时会抛出IllegalMonitorStateException,糁钶茏收所以我说我会调用newspaper.wait(),如果这个调用抛出异常,这意味着Java中的线程并未持有锁,否则线程持有锁。

4、后来我发现线程有一个名为holdsLock(Objectobj)的静态方法,它根据线程是否对传递的对象持有锁来返回true或false。

5、CayS.Horstmann的CoreJavaVolume1-Fundamentals或JavaThreads 2ndEditon,以了解更多关于Java中的Thread类的内容。

6、这就是如何找到一个线程是否拥有Java中某个特定对象的锁。如果您需要在Java应用程序中知道这一点,则应该使用java.lang.Thread类的holdsLock()方法。

© 一点知识