运行以下代码时,主线程无限锁定在MainDealock实例上

    public class MainDeadlock {
      public synchronized void lock() throws InterruptedException {
        wait();
      }

      public static void main(String[] args) throws InterruptedException {
        new MainDeadlock().lock();
      }
    }


但是,由于只有一个线程,即主线程,我无法弄清楚任何循环等待

问题:在这种情况下,我是否仍然可以说陷入僵局?

最佳答案

不,您至少需要2个线程来处理死锁,在死锁中它们彼此之间无法继续前进,因为它们各自都在抓住对方需要的东西。

该代码未锁定。要使线程调用wait,它必须具有锁,但是一旦开始等待,它将释放锁。

您在这里拥有的只是一个线程,它在等待永远不会到来的通知。当您在未指定超时的情况下调用wait时,线程将进入休眠状态,直到:


其他一些线程调用在锁上通知等待线程用来调用wait,或者
直到另一个线程在等待的线程上调用中断,或者
直到您对它厌倦并终止该过程。

10-01 22:00
查看更多