Spec-Zone.ru › OpenJDK 17

Класс FileLock

java.lang.Object
java.nio.channels.FileLock
Все реализованные интерфейсы:
AutoCloseable
public abstract class FileLock extends Object implements AutoCloseable
Токен, представляющий блокировку региона файла.

Объект блокировки файла создаётся каждый раз, когда блокировка приобретается для файла с помощью одного из методов lock или tryLock класса FileChannel, или методов lock или tryLock класса AsynchronousFileChannel.

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

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

Является ли блокировка исключительной или совместной, можно определить, вызвав метод isShared. Некоторые платформы не поддерживают совместные блокировки, в таком случае запрос на совместную блокировку автоматически преобразуется в запрос на исключительную блокировку.

Блокировки, удерживаемые в конкретном файле одной виртуальной машиной Java, не перекрываются. Метод overlaps может быть использован для проверки того, перекрывается ли диапазон кандидата блокировки уже существующей блокировкой.

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

Блокировки файлов удерживаются от имени всей виртуальной машины Java. Они не подходят для управления доступом к файлу несколькими потоками в одной виртуальной машине.

Объекты блокировки файлов безопасны для использования несколькими одновременными потоками.

Зависимости от платформы

Данный API блокировки файлов предназначен для прямого отображения на средства блокировки операционной системы. Таким образом, блокировки, удерживаемые на файле, должны быть видны всем программам, имеющим доступ к файлу, независимо от языка, на котором написаны эти программы.

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

В некоторых системах приобретение обязательной блокировки региона файла предотвращает отображение этого региона с помощью mapped into memory, и наоборот. Программы, объединяющие блокировку и отображение, должны быть готовы к тому, что это сочетание может не сработать.

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

Некоторые сетевые файловые системы разрешают использовать блокировку файлов с отображёнными в памяти файлами только тогда, когда заблокированные регионы выровнены по страницам и являются целым кратным размеру страницы базового аппаратного обеспечения. Некоторые сетевые файловые системы не реализуют блокировки файлов на регионах, которые выходят за определённую позицию, часто 230 или 231. В общем случае следует проявлять осторожность при блокировке файлов, которые находятся на сетевых файловых системах.

С:
1.4

Краткое описание конструкторов

FileLock(AsynchronousFileChannel channel, long position, long size, boolean shared)
FileLock(FileChannel channel, long position, long size, boolean shared)
Модификатор Конструктор Описание
protected
Инициализирует новый экземпляр этого класса.
protected
Инициализирует новый экземпляр этого класса.

Краткое описание методов

Модификатор и тип Метод Описание
Channel acquiredBy()
Возвращает канал, на файле которого была приобретена эта блокировка.
final FileChannel channel()
Возвращает канал файла, на файле которого была приобретена эта блокировка.
final void close()
Этот метод вызывает метод release().
final boolean isShared()
Указывает, является ли эта блокировка совместной.
abstract boolean isValid()
Указывает, валидна ли эта блокировка.
final boolean overlaps(long position, long size)
Указывает, перекрывается ли эта блокировка заданным диапазоном блокировки.
final long position()
Возвращает позицию в файле первого байта заблокированного региона.
abstract void release()
Освобождает эту блокировку.
final long size()
Возвращает размер заблокированного региона в байтах.
final String toString()
Возвращает строку, описывающую диапазон, тип и валидность этой блокировки.

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Подробное описание конструкторов

FileLock

protected FileLock(FileChannel channel, long position, long size, boolean shared)
Инициализирует новый экземпляр этого класса.
Параметры:
channel - Каналы файла, для которого удерживается этот замок
position - Позиция в файле, с которой начинается заблокированный участок; должна быть неотрицательной
size - Размер заблокированного участка; должен быть неотрицательным, и сумма position + size должна быть неотрицательной
shared - true если этот замок общий, false если он эксклюзивный
Исключения:
IllegalArgumentException - Если условия на параметрах не соблюдаются

FileLock

protected FileLock(AsynchronousFileChannel channel, long position, long size, boolean shared)
Инициализирует новый экземпляр этого класса.
Параметры:
channel - Канал, для файла которого удерживается этот замок
position - Позиция в файле, с которой начинается заблокированный участок; должна быть неотрицательной
size - Размер заблокированного участка; должен быть неотрицательным, и сумма position + size должна быть неотрицательной
shared - true если этот замок общий, false если он эксклюзивный
Исключения:
IllegalArgumentException - Если условия на параметрах не соблюдаются
С момента:
1.7

Подробное описание методов

channel

public final FileChannel channel()
Возвращает канал файла, для файла которого был получен этот замок.

Этот метод устарел, заменён методом acquiredBy.

Возвращает:
Канал файла, или null если замок файла не был получен каналом файла.

acquiredBy

public Channel acquiredBy()
Возвращает канал, для файла которого был получен этот замок.
Возвращает:
Канал, для файла которого был получен этот замок.
С момента:
1.7

position

public final long position()
Возвращает позицию в файле первого байта заблокированного участка.

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

Возвращает:
Позиция

size

public final long size()
Возвращает размер заблокированного участка в байтах.

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

Возвращает:
Размер заблокированного участка

isShared

public final boolean isShared()
Определяет, является ли этот замок общим.
Возвращает:
true если замок общий, false если он эксклюзивный

overlaps

public final boolean overlaps(long position, long size)
Определяет, перекрывается ли этот замок заданным диапазоном замков.
Параметры:
position - Начальная позиция диапазона замков
size - Размер диапазона замков
Возвращает:
true тогда и только тогда, когда этот замок и заданный диапазон замков перекрываются по крайней мере одним байтом

isValid

public abstract boolean isValid()
Определяет, является ли этот замок действительным.

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

Возвращает:
true если, и только если, этот замок действителен

release

public abstract void release() throws IOException
Освобождает этот замок.

Если этот объект замка действителен, вызов этого метода освобождает замок и делает объект недействительным. Если этот объект замка недействителен, вызов этого метода не оказывает никакого эффекта.

Исключения:
ClosedChannelException - Если канал, который был использован для получения этого замка, больше не открыт
IOException - Если произошла ошибка ввода-вывода

close

public final void close() throws IOException
Этот метод вызывает метод release(). Он был добавлен в класс, чтобы его можно было использовать в сочетании с конструкцией автоматического управления ресурсами.
Определяется в:
close в интерфейсе AutoCloseable
Исключения:
IOException
С момента:
1.7

toString

public final String toString()
Возвращает строку, описывающую диапазон, тип и действительность этого замка.
Переопределяет:
toString в классе Object
Возвращает:
Описательная строка

© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/channels/FileLock.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API