Я совсем не понял задачу. Мы тестируем порядок блокировки... Но кто блокирует то? Т.е. Я не понимаю, что в принципе должен делать метод isNormalLockOrder. По условию понятно, он должен возвращать true, если блокировка идет от o1 к o2 и false, если наоборот. Но!!! Кто и когда должен вызывать неправильную блокировку? Т.е. Мы передаём в метод isNormalLockOrder объект solution и два объекта o1 и o2, а потом что?! Почему метод someMethodWithSynchronizedBlocks должен вдруг сначала заблокировать объект o2 вместо o1, если мы его вызовем с параметрами (o1, o2)? В каком месте они могут перепутаться? Если метод someMethodWithSynchronizedBlocks вызвать с параметрами (o1, o2), то он их с таком порядке и заблокирует иначе никак. Только есть в другой нити его вызвать с параметрами (o2, o1), он попытается заблокировать сначала o2, потом o1, но и такое поведение не противоречит его логике. Мой мозг отказывается это понимать. Что мы должны протестировать? Может мне кто-нибудь объяснить?