Блокировка чтения и записи Java - PullRequest
2 голосов
/ 28 ноября 2009

Предположим, у меня есть файл, который может быть записан одним потоком / процессом Writer и прочитан другим потоком / процессом Reader. Writer обновляет файл каждые x интервалов времени, а Reader читает его каждые y интервалов времени, если они будут одновременно читать и записывать в файл, будут ли какие-либо проблемы? будет блок чтения, пока не закончится запись? или чтение будет неудачным? и наоборот? Какая лучшая практика здесь?

Ответы [ 2 ]

5 голосов
/ 28 ноября 2009

Вам нужно будет разработать собственный протокол блокировки для реализации в приложениях. Особенности зависят от базовой операционной системы, но в целом ничто не остановит один процесс от чтения файла, даже если другой процесс записывает в него файл.

Java имеет класс FileLock, который можно использовать для координации доступа к файлу. Однако вам необходимо внимательно прочитать предупреждения, особенно те, которые касаются системной зависимости этой функции. Тестирование функции в целевой операционной системе чрезвычайно важно.

Ключевой концепцией Java FileLock является то, что она является только «консультативной». Ваш процесс должен быть в состоянии обнаружить, что другой процесс блокирует файл, но ваш процесс может игнорировать его и делать с файлом все, что ему нравится, без ограничений.

Вопрос неоднозначен, будет ли файл использоваться несколькими процессами или просто разделять потоки внутри одного процесса Java. Это большая разница. Если проблема требует только безопасности потоков в рамках одного процесса, ReentrantReadWriteLock может обеспечить надежное, высокопроизводительное решение без каких-либо ошибок, специфичных для платформы.

0 голосов
/ 28 ноября 2009

Рекомендуется не использовать файл для связи между процессами. Файл не предназначен для этих целей. Вместо этого вы должны использовать обмен сообщениями, который предназначен для связи между процессами. Вы также можете использовать файлы для проверки того, что было отправлено / получено,

Если вы используете файлы в одиночку, вы могли бы найти решение, которое является достаточно хорошим, но я не верю, что у вас будет решение, которое можно считать наилучшей практикой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...