Пишет, что не выполнено условие 1:
Метод isLockOrderNormal должен возвращать true в случае, если синхронизация в методе someMethodWithSynchronizedBlocks происходит сначала по объекту o1, а потом по o2
Но вывод верный:
true
java.lang.Object@2baa6ebd java.lang.Object@256d95b8
package com.javarush.task.task27.task2707;
import java.util.concurrent.atomic.AtomicBoolean;
/*
Определяем порядок захвата монитора
*/
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 InterruptedException {
AtomicBoolean status = new AtomicBoolean(false);
synchronized (o1) {
Thread t1 = new Thread(() -> solution.someMethodWithSynchronizedBlocks(o1, o2));
t1.start();
while (t1.getState() != Thread.State.BLOCKED);
Thread t2 = new Thread(() -> { synchronized (o2) { status.set(true); synchronized (o1) { } } });
t2.start();
while (t2.getState()!= Thread.State.BLOCKED);
return status.get(); } }
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));
}
}