Red de conocimiento informático - Aprendizaje de programación - Programación NIO Bloqueo de lectura y escritura FileChannel

Programación NIO Bloqueo de lectura y escritura FileChannel

Artículo anterior: ¿Qué hacen Channel y FileChannel en la programación NIO?

Por ejemplo, en un proceso jvm, puede usar un FileChannel para escribir a través de múltiples subprocesos. , pero ¿qué pasa si hay varios procesos jvm? En este momento, no hay forma de garantizar que varios subprocesos escriban archivos en orden. Aún puede haber problemas al escribir archivos al mismo tiempo;

Bloqueo de archivos FileChannel, puede bloquear el archivo y compartir el bloqueo. bloqueo, si se coloca un bloqueo compartido en el archivo, puede leer el archivo en este momento, otros también pueden leer el archivo y otros también pueden aplicar un bloqueo compartido. Si es un bloqueo exclusivo, solo puede hacerlo. el hilo de bloqueo. La lectura y escritura de archivos, los bloqueos exclusivos y los bloqueos compartidos son mutuamente excluyentes.

La capa inferior se implementa llamando al fnctl de Linux para bloquear el archivo desde el kernel; ( ) no es bloqueante, intenta adquirir el bloqueo, pero si no puede, por ejemplo porque algún otro proceso ya tiene el mismo bloqueo y no está dispuesto a compartirlo, regresará directamente desde la llamada al método.

lock() está bloqueando. Bloquea el proceso hasta que se puede obtener el bloqueo, o se interrumpe el hilo que llama a lock(), o se cierra el canal que llama a lock().

Bloqueo exclusivo: también llamado bloqueo exclusivo. Si un subproceso obtiene un bloqueo exclusivo en un archivo, otros subprocesos ya no podrán obtener un bloqueo exclusivo o un bloqueo compartido en el mismo archivo hasta que se libere el bloqueo exclusivo. . Otros subprocesos no pueden leer ni escribir;

Bloqueo compartido: si un subproceso obtiene un bloqueo compartido en un archivo, otros subprocesos pueden obtener un bloqueo compartido en el mismo archivo o parte del mismo archivo. compartido, pero no puede obtener el bloqueo exclusivo. Otros hilos pueden leer pero no escribir