Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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 - Fatal编程技术网

Java 我们可以说下面的代码是死锁的一个例子吗

Java 我们可以说下面的代码是死锁的一个例子吗,java,multithreading,Java,Multithreading,我试过使用下面的代码,这似乎是一个死锁场景 public class MyThread { public static void main(String[] args) { try { Thread.currentThread().join(); } catch (InterruptedException e) { // TODO Auto-generated catch block

我试过使用下面的代码,这似乎是一个死锁场景

public class MyThread {

    public static void main(String[] args) {
        try {
            Thread.currentThread().join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
    }
}
但我怀疑事实并非如此。这不是僵局。我所理解的是
Main
线程正在等待自己的完成。我已经深入研究过了,但是join中的wait方法是原生的,我无法通过它获得更多信息。

来自维基百科

“僵局是指两个或多个相互竞争的行动都在等待对方完成,因此双方都没有完成。”

在本例中,您正在等待一个线程完成,而该线程正在等待一个任务完成。虽然只有一个线程,但仍然存在死锁IMHO

仅供参考,看看您是否能发现此代码中的死锁

public class Main {
    static String HI = "Hello World";

    static {
        Thread t = new Thread() {
            @Override
            public void run() {
                System.out.println(HI);
            }
        };
        t.start();
        try {
            t.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void main(String... args) {
    }
}

顺便说一句,如果你做了
HI
final,它不会死锁

请参阅“询问前请先搜索”。也许这会有所帮助:您有明确的证据表明死锁正在发生。你到底在怀疑什么?为什么?关于僵局的定义,我认为这是一个合理的问题。根据常见的定义,必须至少涉及两个线程。不过,目前的案件闻起来像是一个僵局。。。