..
package com.javarush.task.task27.task2707;
/*
Определяем порядок захвата монитора
*/
public class Solution {
public void someMethodWithSynchronizedBlocks(Object obj1, Object obj2) {
synchronized (obj1) {
synchronized (obj2) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(obj1 + " " + obj2);
}
}
}
public static boolean isNormalLockOrder(final Solution solution, final Object o1, final Object o2) throws Exception {
class Thread1 extends Thread{
public boolean h;
public void run(){
solution.someMethodWithSynchronizedBlocks(o1,o2);
}
}
Thread1 th = new Thread1();
th.start();
Thread.sleep(300);
while(th.holdsLock(o2)){
th.h= th.holdsLock(o1);
}
return th.h;
}
public static void main(String[] args) throws Exception {
final Solution solution = new Solution();
final Object o1 = new Object();
final Object o2 = new Object();
for(int i = 0;i<30;i++)
System.out.println(isNormalLockOrder(solution, o1, o2));
}
}