I looked at the previous task, and the previous lessons. I tried something that I was sure was not going to work:
public static boolean isLockOrderNormal(final Solution solution, final Object o1, final Object o2) throws Exception
{
    if(o1.hashCode() > o2.hashCode())
    {
        return true;
    }
    return false;
}
Just to see if the validation results would give me any clues as to how to proceed. No, no help. The thing I don't understand here... Deadlock comes from the unpredictability in what order threads are processing when it comes to conflicting synchronized blocks. So how can the isLockOrderNormal method know what order things will be handled in someMethodWithSynchronizedBlocks? After a while I gave in and looked at the solution, and holy cow I don't understand one bit of it. Why is it running anonymous threads? Why is there a while loop with no body? I really need someone to go through line by line and explain what the solution is doing, because I don't understand it at all.