Spec-Zone.ru › OpenJDK 27

Класс 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()
Возвращает строку с описанием диапазона, типа и действительности этой блокировки.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, является ли другой объект «равным» этому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии.
Финализация устарела и подлежит удалению в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова уведомления или прерывания, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова уведомления или прерывания, либо до истечения заданного промежутка реального времени.

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

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
Возвращает:
Строка с описанием

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, общие сведения, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её дочерних компаний в США и других странах.
Авторское право © 1993, 2026, Oracle и/или её дочерние компании, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

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