Возврат метода по условию же, что не так?
package com.javarush.task.task27.task2707;
/*
Определяем порядок захвата монитора
*/
public class Solution {
public void someMethodWithSynchronizedBlocks(Object obj1, Object obj2) {
synchronized (obj1) {
//System.out.println("sO1");
synchronized (obj2) {
System.out.println(obj1 + " " + obj2);
}
}
}
public static boolean isNormalLockOrder(final Solution solution, final Object o1, final Object o2) throws Exception {
//do something here
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
try {
synchronized (o2) {
//System.out.println("o2 sleep");
Thread.sleep(500);
//System.out.println("o2 nesleep");
synchronized (o1) {
//System.out.println("o1 sleep");
Thread.sleep(1200);
//System.out.println("o1 nesleep");
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
//System.out.println("n2 stsrt");
solution.someMethodWithSynchronizedBlocks(o1, o2);
//System.out.println("n2 end");
}
});
t1.start();
Thread.sleep(100);
t2.start();
Thread.sleep(2000);
return t2.getState() == Thread.State.BLOCKED;
}
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(isNormalLockOrder(solution, o1, o2));
}
}