Следует избегать особого типа ошибок, имеющего отношение к многозадачностии называемого взаимной блокировкой, которая происходит в том случае, когда потоки исполнения имеют циклическую зависимость от пары синхронизированных объектов.
Допустим, один поток исполнения входит в монитор объекта Х, а другой - в монитор объекта У. Если поток исполнения в объекте Х попытается вызвать любой синхронизированный метод для объекта У, он будет блокирован, как и предполагалось. Читать