以下代码在运行时是否会导致死锁

时间:2018-07-12 14:57:13

标签: java multithreading concurrency deadlock

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

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

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

但是,由于只有一个线程,即主线程

,因此我无法找出任何循环等待

问题:在这种情况下,我是否仍可以说是一个僵局

1 个答案:

答案 0 :(得分:1)

否,您至少需要2个线程来进行死锁,因为它们死守了彼此需要的东西,所以死锁使彼此之间无法继续前进。

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

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

  • 其他一些线程调用在锁上通知等待线程用来调用wait,或者

  • 直到另一个线程在等待的线程或

  • 上调用中断
  • 直到您对此感到厌倦并终止该过程。

相关问题