Вывод программы соответствует условию.
Помогите понять какой сценарий я упуска?
package com.javarush.task.task27.task2707;
/*
Определяем порядок захвата монитора
*/
public class Solution {
public void someMethodWithSynchronizedBlocks(Object obj1, Object obj2) {
synchronized (obj1) {
synchronized (obj2) {
System.out.println(obj1 + " " + obj2);
}
}
}
public static boolean isLockOrderNormal(final Solution solution, final Object o1, final Object o2) throws Exception {
synchronized (o1) {
Thread test = new Thread(new Runnable() {
@Override
public void run() {
new Solution().someMethodWithSynchronizedBlocks(o1, o2);
}
});
test.start();
while (test.getState() != Thread.State.BLOCKED) {
Thread.sleep(1);
}
Thread test2 = new Thread(new Runnable() {
@Override
public void run() {
synchronized (o2) {
}
}
});
test2.start();
while (!(test2.getState() == Thread.State.BLOCKED || test2.getState() == Thread.State.TERMINATED)) {
// System.out.println(test2.getState());
Thread.sleep(1000);
}
boolean result;
if (test2.isAlive()) result = false;
else result = true;
test.interrupt();
return result;
}
}
public static void main(String[] args) throws Exception {
final Solution solution = new Solution();
final Object o1 = new Object();
final Object o2 = new Object();
System.out.println(isLockOrderNormal(solution, o1, o2));
}
}