-3
私はこのコードをデバッグし、なぜ私はデッドロックを取得するのか分かりません。このコードを実行すると、他のスレッドがロックの取得を待機している間に、結合メソッドのメインスレッドロックのように見えます。Java - 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()'は、ターゲットスレッドが終了するのを待ちます。 Javadocにはロックを解除するものは何もありません。あなたはそれを作った。 – EJP
スレッドの仕組みをよく読んでください。 –