Я видел подобные вещи в OSGI, где структура загрузчика классов представляет собой граф, а не дерево, как это обычно делается в J2EE.Загрузчики классов блокируются при загрузке класса, поэтому два потока (a, b), загружающие классы из загрузчиков классов в порядке (x, y) и (y, x) соответственно, могут заблокироваться.Это может произойти, если статические инициализаторы вызывают больше загрузки классов из другого загрузчика классов.Нечасто, что классы начальной загрузки вызывают загрузку классов из загрузчика классов приложения, но любые фабричные классы в стандартных библиотеках, которые используют загрузчик контекста потока, соответствовали бы требованиям.Обычное решение состоит в том, чтобы загружать классы раньше, возможно, во время запуска приложения, тем самым прерывая цикл.