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