Spec-Zone.ru › OpenJDK 25

Класс 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

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

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, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/nio/channels/FileLock.html

Spec-Zone.ru

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