这是代码中的一种僵局吗?

时间:2015-12-07 20:03:46

标签: java multithreading operating-system synchronization deadlock

当然,第二个循环永远不会被执行,但仍然很想知道以下示例是否可以归类为死锁。

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 + " ");

    }
}

2 个答案:

答案 0 :(得分:5)

不,这不是僵局。但是你确实无限期地阻止了你的主线程。 join method阻塞直到调用它的Thread为止。

  

等待此线程死亡。

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

这不同于死锁,其中两个线程各自拥有对不同资源的锁定,但每个线程都需要另一个锁定资源才能继续。情况并非如此。

答案 1 :(得分:0)

我称之为自我僵局。 “死锁”描述了一组线程中的每个成员都在等待其他成员执行某些操作的情况。

更正式地说,想象一个有向图表示过程生命中的瞬间。图中的每个节点对应于进程中的线程,从A到B的弧表示线程A被阻塞,直到线程B完成某个操作。

如果图形包含一个循环,那么该循环中的线程就会死锁。

所以问题是,你称之为一个循环?我们有些人称之为“自我僵局”。您可以谷歌搜索该短语,以了解我们是谁。