class Ideone
{
{
// 1.スレッド1(mainスレッド)が lock1 のロックを取得する
synchronized(lock1)
{
// 2.スレッド2が lock2 のロックを取得する
synchronized(lock2)
{
// 3.スレッド2が lock1 のロックを取得しようとするが、
// スレッド1が lock1 のロックを保持しているのでブロックされる。
synchronized(lock1) {}
}
}).start();
// 4.スレッド1が lock2 のロックを取得しようとするが、
// スレッド2が lock2 のロックを保持しているのでブロックされる。
synchronized(lock2) {}
}
}
}
CmNsYXNzIElkZW9uZQp7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQlmaW5hbCBPYmplY3QgbG9jazEgPSBuZXcgT2JqZWN0KCk7CgkJZmluYWwgT2JqZWN0IGxvY2syID0gbmV3IE9iamVjdCgpOwoKIAkJLy8gMS7jgrnjg6zjg4Pjg4kxKG1haW7jgrnjg6zjg4Pjg4kp44GMIGxvY2sxIOOBruODreODg+OCr+OCkuWPluW+l+OBmeOCiwoJCXN5bmNocm9uaXplZChsb2NrMSkKCQl7CgkJCW5ldyBUaHJlYWQoKCkgLT4gewoJCQkJLy8gMi7jgrnjg6zjg4Pjg4ky44GMIGxvY2syIOOBruODreODg+OCr+OCkuWPluW+l+OBmeOCiwoJCQkJc3luY2hyb25pemVkKGxvY2syKQoJCQkJewoJCQkJCS8vIDMu44K544Os44OD44OJMuOBjCBsb2NrMSDjga7jg63jg4Pjgq/jgpLlj5blvpfjgZfjgojjgYbjgajjgZnjgovjgYzjgIEKCQkJCQkvLyDjgrnjg6zjg4Pjg4kx44GMIGxvY2sxIOOBruODreODg+OCr+OCkuS/neaMgeOBl+OBpuOBhOOCi+OBruOBp+ODluODreODg+OCr+OBleOCjOOCi+OAggoJCQkJCXN5bmNocm9uaXplZChsb2NrMSkge30KCQkJCX0KCQkJfSkuc3RhcnQoKTsKIAoJCQlUaHJlYWQuc2xlZXAoMTAwMCk7CgoJCQkvLyA0LuOCueODrOODg+ODiTHjgYwgbG9jazIg44Gu44Ot44OD44Kv44KS5Y+W5b6X44GX44KI44GG44Go44GZ44KL44GM44CBCgkJCS8vIOOCueODrOODg+ODiTLjgYwgbG9jazIg44Gu44Ot44OD44Kv44KS5L+d5oyB44GX44Gm44GE44KL44Gu44Gn44OW44Ot44OD44Kv44GV44KM44KL44CCCgkJCXN5bmNocm9uaXplZChsb2NrMikge30KCQl9Cgl9Cn0=