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-Thread.join()不会释放锁_Java_Multithreading - Fatal编程技术网

Java-Thread.join()不会释放锁

Java-Thread.join()不会释放锁,java,multithreading,Java,Multithreading,我调试这段代码,我不明白为什么会出现死锁。执行此代码时,它看起来像join方法中的主线程锁,而另一个线程正在等待获取锁 public class Foo { private final Thread thread; public Foo() { thread = new Thread(new Bar(), "F"); thread.start(); } public void run() { synchronized (this) { thread.

我调试这段代码,我不明白为什么会出现死锁。执行此代码时,它看起来像join方法中的主线程锁,而另一个线程正在等待获取锁

public class Foo {

private final Thread thread;

public Foo() {
    thread = new Thread(new Bar(), "F");
    thread.start();
}

public void run() {
    synchronized (this) {
        thread.interrupt();
        try {
            thread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Foo run method");
    }
}

private final class Bar implements Runnable {

    @Override
    public void run() {
        synchronized (Foo.this) {
            System.out.println("Bar run method");
        }
    }

}

public static void main(String[] args) throws InterruptedException {
    final Foo foo = new Foo();
    foo.run();
}

}

谢谢你的帮助

这是因为
Thread.join()
不会释放任何锁。您已经设计了一个完美工作的死锁,
Thread-1
正在等待
Thread-2
在锁定
Foo
后死亡,而
Thread-2
正在等待锁定
Foo


(从技术上讲,当前的实现确实会释放锁,因为它在
线程上同步时在内部使用
wait()
。但是这是一种与用户代码无关的内部机制)

我不明白您不明白的是什么
Thread.join()
等待目标线程完成。Javadoc中没有关于释放锁的内容。这是你编的。请仔细阅读线程的工作原理。