El bloqueo parcial de un archivo es un negocio complejo que muchos sistemas operativos evitan. Sin embargo, si insiste en hacerlo, una forma es diseñar su propio objeto de mecanismo de bloqueo que registre qué partes del archivo están bloqueadas. Esencialmente, antes de leer o escribir un objeto, debe solicitar un bloqueo para un rango de bytes específico del archivo. Se considera que las cerraduras chocan si se superponen en absoluto en el rango de bytes. Los bloqueos de lectura y escritura se tratan de manera diferente: una lectura puede superponerse con cualquier cantidad de bloqueos de lectura de forma segura, pero un bloqueo de escritura debe superponerse sin otros bloqueos, leer o escribir. Hay muchas preguntas sobre si esperar o cancelar si no puede obtener el bloqueo y si se bloquean las lecturas mientras espera una escritura, pero solo usted puede responderlas sobre su aplicación.
Dada la complejidad de esto, puede ser mejor bloquear el archivo completo. Compruebe si obtiene un rendimiento adecuado, y no olvide que puede permitir varias lecturas a la vez, siempre que no haya escrituras.
Depende de cómo lea y escriba desde el archivo, pero las primitivas de sincronización de java.util.concurrent funcionan muy bien en la JVM moderna. –
Entiendo si está tratando de usar el mismo RandomAccessFile de diferentes subprocesos, pero ¿realmente necesita hacer varias lecturas al mismo tiempo? No soy un experto, pero en la mayoría de los casos el hardware no podrá leer varias lecturas al mismo tiempo (no sé para las matrices de discos de alta gama). –
Funcionará con matrices RAID. Además: cuando los datos provienen de la memoria caché, se pueden recuperar en paralelo. –