Примечание : я читал другие посты о том, как заблокировать и разблокировать файл. Я не нашел ничего особенного, о чем я не знал. Поэтому я приведу свой сценарий здесь, чтобы кто-то мог дать некоторые предложения.
По моему опыту, FileChannel.lock не гарантирует ситуацию блокировки и разблокировки файла, когда разные объекты из нескольких экземпляров jvm пытаются заблокировать и обновить файл.
Сценарий в моем приложении - есть три отдельные программы, которые обновляют файл. Эти программы запускаются на разных экземплярах jvm. Скажем, программы - A, B и C, а файл - F. Если A блокирует файл, F, B и C должны подождать, пока F не будет выпущен, прежде чем одна из других программ сможет его удержать. Это прекрасно работает, если программы запускаются на одном экземпляре jvm. К сожалению, это не работает в нескольких экземплярах jvm.
У меня была другая идея, которая заключалась в том, чтобы иметь плоский файл, в котором я указал бы, следует ли обновить F Содержимое этого плоского файла может быть ЗАБЛОКИРОВАНО или РАЗБЛОКИРОВАНО. По умолчанию / начальное значение будет разблокировано. Поэтому, когда одна из программ захочет обновить F, она должна увидеть флаг в плоском файле. Если флаг читает LOCKED, он должен подождать. Однако при таком подходе возникает проблема - что, если несколько программ открывают плоский файл ровно в одно и то же время и видят «UNLOCKED», или две программы, которые ожидали, пока плоский файл прочитает UNLOCKED, и в то же самое время увидят чтение файла » UNLOCKED "?
Есть идеи, ребята?