Правда когда меняю местами объекты o1, o2, всегда возращает тру...
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 isNormalLockOrder(final Solution solution, final Object o1, final Object o2) throws Exception {
Thread thread1 = new Thread();
Thread thread2 = new Thread();
synchronized (o1){
new Thread().sleep(500);
thread1.sleep(100);
synchronized (o2){
solution.someMethodWithSynchronizedBlocks(o2, o1);
thread1.start();
thread2.start();
new Thread().sleep(2000);
if(thread2.getState() != Thread.State.BLOCKED){
return true;
}
else return false;
}
}
}
public static void main(String[] args) throws Exception {
final Solution solution = new Solution();
final Object o1 = new Object();
final Object o2 = new Object();
while (true){
System.out.println(isNormalLockOrder(solution, o1, o2));
}}
}