代码之家  ›  专栏  ›  技术社区  ›  Rui

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

  •  0
  • Rui  · 技术社区  · 8 年前

    运行以下代码时, 主螺纹 锁定的 实例 属于 MainDealock 无限

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

    但是,我想不出 循环等待 因为只有一根线,即 主螺纹

    问题:我还可以说 死锁 在这种情况下?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Nathan Hughes    8 年前

    不,对于死锁,您至少需要2个线程,因为每个线程都保持着其他线程所需的某些内容,所以它们会阻止彼此继续进行。

    这个代码不能锁住锁。对于一个线程调用wait,它必须拥有锁,但一旦它开始等待,它就会释放锁。

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

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

    • 直到另一个线程调用在等待的线程上中断或

    • 直到你厌倦了这个过程。