блокировки файлов хранятся от имени всей виртуальной машины Java. Они не подходят для управления доступом к файлу с помощью нескольких потоков в одной и той же виртуальной машине. Подходит. < /p>
Я подумал, что, возможно, эти два могут быть объединены: использование FileLock для межпроцессного исключения и повторного залога для координации внутрипроцессов, но это вызвало тупики из-за непоследовательного порядок получения блокировки. Замок должен быть доступен на этапе конфигурации, а также через совершенно разные сборки Gradle (например, несколько независимых сборков, запущенных на CI). < /p>
Внешние библиотеки < /h5>
Наиболее близкая реализация, которую я обнаружил,-это утилита внутренней границы (filelockmanager), которая использует сетевые коммерциалы, когда они будут предоставлены, когда они будут предоставлены, когда они дают контакты. Тем не менее, я не могу использовать его, потому что это внутреннее. Если бы была библиотека C, возможно, я мог бы взаимодействовать с ней. < /P>
Требования < /h4>
- Заблокировать файл, через потоки и процессы, чтобы предотвратить одновременную модификацию. < /Li>
Правильное и точное поведение предпочтительнее производительности. одновременные читатели. - Только один писатель, и нет читателей, пока писатель держит замок.
- Автор ждет, пока все читатели не закончатся. /> < /li>
kotlin /jvm с использованием Java 17. < /li>
Работает надежно на Linux, MacOS и Windows (но необходимо работать только на одной машине за один раз, без сетевой помощи). < /li>
Невозможно использовать внешние процессы, чтобы они не могли управлять, но не могут быть связаны с ними, но не могут быть связаны с ними. это, они должны быть легкими, можно затенять (чтобы избежать загрязнения Gradle BuildScript ClassPath).
Подробнее здесь: https://stackoverflow.com/questions/795 ... -directory