Я создал бы некоторый в памяти ориентированная на многопотоковое исполнение блокировка. Каждый поток мог ожидать на блокировке, пока это не было свободно. Когда блокировка станет свободной, возьмите блокировку и считайте файл в течение определенного отрезка времени или определенного объема данных, затем выпустите блокировку для любых других потоков ожидания.
Попробуйте запустить это из командной строки в корне вашего верхнего проекта:
mvn dependency:tree
Попробуйте использовать UCDetector , он помогает находить циклы зависимостей на уровне класса при разработке. Еще один полезный инструмент - Tattletale .
Он предоставляет вам отчеты, которые могут помочь вам
Я намеренно пропустил решения maven, чтобы не удваивать другие отзывы.
Я не уверен, связано ли это с maven (у вас не может быть циклических зависимостей между модулями с maven), но, возможно, я чего-то не понял. Тем не менее, вы можете использовать JDepend для анализа фрагмента кода и поиска циклических зависимостей (см. Интерпретация циклов зависимостей ). Если вы предпочитаете использовать JDepend из Eclipse, есть плагин JDepend4Eclipse .
Проверьте Batik из его репозитория subversion , запустите JDepend в его источниках и посмотрите, найдете ли что-нибудь Я думаю, что вы будете). Но, честно говоря, это была легкая часть. Избавиться от циклических зависимостей - другая история, и это может быть не так просто. Это может включать такие задачи, как перемещение классов из одного пакета в другой, переупаковка модулей, понимание того, как Batik ' s (обратите внимание, что его сценарий сборки Ant содержит 2220 строк) и т. д. Другими словами, это потребует серьезной работы над библиотекой, которую вы изначально просто хотите использовать (и если вы не внесете эти изменения, вам, возможно, придется их снова с более поздним выпуском). Мой совет: подумайте дважды, прежде чем начинать копать в этом направлении.
Для вашей информации есть также jdepend-maven-plugin , который полезен только в том случае, если вы хотите запустить JDepend в своем проекте. (т.е. ваш код), который не является вашим запросом.