Класс 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
public final String toString()
- Переопределяет:
-
toStringв классеObject - Возвращает:
- Строка описания
© 1993, 2023, 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/21/docs/api/java.base/java/nio/channels/FileLock.html