Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这是代码中的一种死锁吗?_Java_Multithreading_Operating System_Synchronization_Deadlock - Fatal编程技术网

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

Java 这是代码中的一种死锁吗?,java,multithreading,operating-system,synchronization,deadlock,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();

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

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

    }
}
公共类测试{
公共静态void main(字符串[]args)引发InterruptedException{

对于(inti=1;i我将其称为自死锁。“死锁”描述了一种情况,其中一组线程的每个成员都在等待另一个成员做某事


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

如果图形包含一个循环,则该循环中的线程处于死锁状态


所以问题是,你把一个循环称为什么?我们中的一些人称之为“自死锁”。你可以在谷歌上搜索这个短语来找出我们是谁。

我称之为自死锁。“死锁”描述的是一组线程的每个成员都在等待其他成员做某事的情况


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

如果图形包含一个循环,则该循环中的线程处于死锁状态


所以问题是,你把一个循环称为什么?我们中的一些人称之为“自我死锁”。你可以用谷歌搜索这个短语来找出我们是谁。

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

等待此线程死亡

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


这与死锁不同,死锁是两个线程各自拥有单独资源上的锁,但每个线程都需要另一个被锁定的资源才能继续。这里不是这种情况。

不,这不是死锁。但是您确实无限期地阻塞了主线程。这些阻塞直到调用它的
线程死亡

等待此线程死亡

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


这与死锁不同,死锁是两个线程各自拥有单独资源上的锁,但每个线程都需要另一个被锁定的资源才能继续。这里的情况并非如此。

永远等待不会使其成为死锁。当前线程不会阻止任何其他线程。永远等待不会使其成为死锁。当前线程不会阻止其他线程y other.@Kayaman,我不会不同意这一点,但我仍然认为“死锁”是对挂起原因的恰当描述。在经典的死锁中,A在等待B做某事的同时,B在等待A。你可以概括这一点(例如,A在等待B的同时B在等待C,而C在等待A),或者您可以使用退化案例(a等待a.)@jameslarge,“死锁”是一个在并发编程环境中具有相当普遍意义的术语:它是两个或多个并发操作各自阻止另一个操作完成的情况。存在两个操作最小情况并不意味着类似的一个操作情况仍然满足定义。您可以应用任何如果你想与他人有效沟通,那么你将坚持常用的标准术语定义。@ JAMESHOLD,你可以考虑Google“死锁”本身。所有在计算上下文中定义术语的热门文章都是关于“两个或多个”的一致。(这里特别相关)甚至。@JohnBollinger,这就是为什么我通常通过称之为self-deadlock来限定单线程情况。@Kayaman,我不会不同意,但我仍然认为“deadlock”是对挂起原因的恰当描述。在经典的死锁中,A在等待B做某事的同时B在等待A。你可以概括这一点(例如,A等待B,B等待C,C等待A),或者你可以有一个退化的情况(A等待A)。@jameslarge,“死锁”是一个在并发编程环境中具有相当普遍意义的术语:它是两个或多个并发操作各自阻止另一个操作完成的情况。存在两个操作最小情况并不意味着类似的一个操作情况仍然满足定义。您可以应用任何如果你想与他人有效沟通,那么你将坚持常用的标准术语定义。@ JAMESHOLD,你可以考虑Google“死锁”本身。所有在计算上下文中定义术语的热门文章都是关于“两个或多个”的一致。(这里特别相关)甚至。@JohnBollinger,这就是为什么我通常通过称之为self-deadlock来限定单线程情况。