Частичная блокировка файла - это сложный бизнес, который многие операционные системы избегают делать. Однако, если вы настаиваете на этом, одним из способов является создание собственного объекта механизма блокировки, который фиксирует, какие части файла заблокированы. По сути, перед чтением или записью объекта необходимо запросить блокировку для определенного байтового диапазона файла. Замки считаются связанными, если они перекрываются вообще в байтовом диапазоне. Чтение и запись блокировок обрабатываются по-разному: чтение может накладываться на любое количество блокировок чтения безопасно, но блокировка записи должна перекрываться без каких-либо других блокировок, чтения или записи. Есть много вопросов о том, ждать или прервать, если вы не можете получить блокировку, и блокировать чтение во время ожидания записи, но только вы можете ответить на них о своем приложении.
Учитывая сложность этого, лучше всего заблокировать весь файл. Убедитесь, что вы получаете адекватную производительность - и не забывайте, что вы можете разрешить несколько чтений сразу, пока нет записей.
Это зависит от того, как вы читаете и записываете из файла, но примитивы синхронизации из java.util.concurrent очень хорошо работают на современной JVM. –
Я понимаю, если вы пытаетесь использовать тот же RandomAccessFile из разных потоков, но вам действительно нужно делать несколько чтений одновременно? Я не эксперт, но в большинстве случаев аппаратное обеспечение не сможет одновременно обслуживать несколько считываний (я не знаю, для больших массивов дисков). –
Он будет работать с RAID-массивами. Также: когда данные поступают из кеша, его можно получить параллельно. –