运行以下代码时,主线程被无限锁定在MainDealock
的实例上
public class MainDeadlock {
public synchronized void lock() throws InterruptedException {
wait();
}
public static void main(String[] args) throws InterruptedException {
new MainDeadlock().lock();
}
}
但是,由于只有一个线程,即主线程
,因此我无法找出任何循环等待问题:在这种情况下,我是否仍可以说是一个僵局?
答案 0 :(得分:1)
否,您至少需要2个线程来进行死锁,因为它们死守了彼此需要的东西,所以死锁使彼此之间无法继续前进。
此代码未锁定。要让线程调用wait,它必须具有锁,但是一旦开始等待,它将释放锁。
这里只有一个线程在等待永远不会到来的通知。当您在未指定超时的情况下调用wait时,线程将进入休眠状态,直到:
其他一些线程调用在锁上通知等待线程用来调用wait,或者
直到另一个线程在等待的线程或
直到您对此感到厌倦并终止该过程。