Класс 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
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Инициализирует новый экземпляр этого класса. |
|
protected |
Инициализирует новый экземпляр этого класса. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Channel |
acquiredBy() |
Возвращает канал файла, для которого была получена эта блокировка. |
final FileChannel |
channel() |
Возвращает файловый канал, для которого была получена эта блокировка. |
final void |
close() |
Этот метод вызывает метод release(). |
final boolean |
isShared() |
Показывает, является ли эта блокировка совместной. |
abstract boolean |
isValid() |
Показывает, действительна ли эта блокировка. |
final boolean |
overlaps |
Показывает, перекрывает ли эта блокировка заданный диапазон блокировки. |
final long |
position() |
Возвращает позицию в файле первого байта заблокированной области. |
abstract void |
release() |
Снимает эту блокировку. |
final long |
size() |
Возвращает размер заблокированной области в байтах. |
final String |
toString() |
Возвращает строку с описанием диапазона, типа и действительности этой блокировки. |
Подробное описание конструкторов
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()
Заблокированная область не обязательно должна находиться в пределах фактического базового файла или даже перекрываться с ним, поэтому значение, возвращаемое этим методом, может превышать текущий размер файла.
- Возвращает:
- Размер заблокированной области
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
© 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