Le verrouillage partiel d'un fichier est une activité complexe que de nombreux systèmes d'exploitation évitent de faire. Cependant, si vous insistez pour le faire, vous pouvez concevoir votre propre mécanisme de verrouillage qui enregistre quelles parties du fichier sont verrouillées. Essentiellement, avant de lire ou d'écrire un objet, vous devez demander un verrou pour une plage d'octets spécifique du fichier. Les verrous sont considérés comme incompatibles s'ils se chevauchent dans une plage d'octets. Les verrous en lecture et en écriture sont traités différemment: une lecture peut chevaucher en toute sécurité un nombre quelconque de verrous de lecture, mais un verrou d'écriture doit chevaucher aucun autre verrou, lecture ou écriture. Il y a beaucoup de questions sur le fait d'attendre ou d'abandonner si vous ne pouvez pas obtenir le verrou, et si vous voulez bloquer les lectures pendant qu'une écriture est en attente, mais seulement vous pouvez y répondre à propos de votre application.
Compte tenu de la complexité de cela, il peut être préférable de verrouiller le fichier entier. Vérifiez si vous obtenez des performances adéquates - et n'oubliez pas que vous pouvez autoriser plusieurs lectures à la fois, tant qu'il n'y a pas d'écritures.
Cela dépend de la façon dont vous lisez et écrivez à partir du fichier, mais les primitives de synchronisation de java.util.concurrent fonctionnent très bien sur la JVM moderne. –
Je comprends si vous essayez d'utiliser le même RandomAccessFile de threads différents, mais vous avez vraiment besoin de faire plusieurs lectures en même temps? Je ne suis pas un expert mais dans la plupart des cas, le matériel ne pourra pas servir plusieurs lectures en même temps (je ne sais pas pour les baies de disques haut de gamme). –
Cela fonctionnera avec les RAID-Arrays. Aussi: lorsque les données proviennent du cache, elles peuvent être récupérées en parallèle. –