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