Spec-Zone.ru › OpenJDK 24

Класс 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. В целом, следует проявлять большую осторожность при блокировании файлов, которые находятся на сетевых файловых системах.

Since:
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, если данный замок и указанный диапазон блокировки перекрываются хотя бы одним байтом; false, если size отрицательный или диапазон блокировки не перекрывает данный замок

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, 2025, 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/nio/channels/FileLock.html

Spec-Zone.ru

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