Java-Thread.join()不会释放锁
我调试这段代码,我不明白为什么会出现死锁。执行此代码时,它看起来像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.
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中没有关于释放锁的内容。这是你编的。请仔细阅读线程的工作原理。