私の理解によると、次のコードはデッドロックになるはずです。その理由は、スレッド t1 が静的オブジェクト firstData をロックするときに、クラスのロックを取得したためです。したがって、別の静的オブジェクト secondData をロックしようとすると、リクエストはブロックされます。
ただし、プログラムは正常に実行され、印刷されます*** Successfully acquired both the locks
ここにない静的オブジェクトのロックについてはどうですか?
public class Deadlock {
public static void main(String[] args) {
Thread t1 = new Thread(new DeadlockRunnable());
t1.start();
}
}
class DeadlockRunnable implements Runnable {
static Object firstData = new Object();
static Object secondData = new Object();
public void run() {
synchronized(firstData) {
synchronized(secondData) {
System.out.println("*** Successfully acquired both the locks");
}
}
}
}
ロックはクラスではなくオブジェクトにあると答えたすべての人は、これを見てください