
方法/步骤
-
1
产生死锁的四个必要条件:
互斥条件:一个资源每次只能被一个进程(线程)使用。
请求与保持条件:一个进程(线程)因请求资源而阻塞时,对已获得的资源保持不放。
不剥夺条件 : 此进程(线程)已获得的资源,在末使用完之前,不能强行剥夺。
循环等待条件 : 多个进程(线程)之间形成一种头尾相接的循环等待资源关系。
-
2
设法提供了基于同步块和wait()和notify()方法的属性的逻辑,如第一个答案所示,但他当时并不满意许多面试官期望得到他们认为最好的答案,他们会推动你继续寻找直到你放弃,或者你给他们他们想要的答案。
-
3
当wait()和notify()方法从非同步上下文中调用时会抛出IllegalMonitorStateException,所以我说我会调用newspaper.wait(),如果这个调用抛出异常,这意味着Java中的线程并未持有锁,否则线程持有锁。
-
4
后来我发现线程有一个名为holdsLock(Object obj)的静态方法,它根据线程是否对传递的对象持有锁来返回true或false。
-
5
Cay S. Horstmann的Core Java Volume 1 - Fundamentals或Java Threads
2nd Editon,以了解更多关于Java中的Thread类的内容。 -
6
这就是如何找到一个线程是否拥有Java中某个特定对象的锁。如果您需要在Java应用程序中知道这一点,则应该使用java.lang.Thread类的holdsLock()方法。
END
文章评论