这是代码中的一种死锁吗?

Is it a kind of deadlock in the code?

肯定不会执行第二个循环,但仍然想知道下面的示例是否可以归类为死锁。

public class Test {
    public static void main(String[] args) throws InterruptedException {
        for (int i = 1; i <= 10; i++)
            System.out.print(i + " ");

        Thread.currentThread().join();

        for (int i = 11; i <= 20; i++)
            System.out.print(i + " ");

    }
}

我称之为自我僵局。 "Deadlock" 描述了一组线程中的每个成员都在等待其他成员做某事的情况。


更正式地说,假设有一个有向图表示流程生命周期中的一个瞬间。图中的每个节点对应进程中的一个线程,从A到B的弧线表示线程A被阻塞,直到线程B完成某个动作。

如果图中包含一个循环,则该循环中的线程将死锁。

那么问题来了,你怎么称呼一个循环?我们中的一些人称之为 "self deadlock"。您可以 google 该短语来了解我们是谁。

不,这不是死锁。但是你确实无限期地阻塞了你的主线程。 join method 阻塞,直到它被调用的 Thread 消亡。

Waits for this thread to die.

调用Thread.currentThread().join();意味着主线程在等待自己死亡,这不会发生。

这与死锁不同,在死锁中,两个线程各自拥有对不同资源的锁定,但每个线程都需要对方锁定的资源才能继续。这里不是这种情况。