FileChannel.Lock Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Перегрузки
Lock() |
Получает монопольную блокировку файла этого канала. |
Lock(Int64, Int64, Boolean) |
Получает блокировку в заданном регионе файла этого канала. |
Lock()
Получает монопольную блокировку файла этого канала.
[Android.Runtime.Register("lock", "()Ljava/nio/channels/FileLock;", "")]
public Java.Nio.Channels.FileLock? Lock ();
[<Android.Runtime.Register("lock", "()Ljava/nio/channels/FileLock;", "")>]
member this.Lock : unit -> Java.Nio.Channels.FileLock
Возвращаемое значение
Объект блокировки, представляющий только что полученную блокировку
- Атрибуты
Исключения
Файловый канал закрыт.
этот канал не был открыт для записи.
либо блокировка уже хранится, которая перекрывает этот запрос блокировки, либо другой поток ожидает получения блокировки, которая будет перекрываться с этим запросом.
вызывающий поток был прерван во время ожидания получения блокировки.
канал был закрыт, пока вызывающий поток ждал получения блокировки.
Если при получении запрошенной блокировки возникает другая ошибка ввода-вывода.
Комментарии
Получает монопольную блокировку файла этого канала.
Вызов этого метода формы fc.lock()
ведет себя точно так же, как вызов
fc.{@link #lock(long,long,boolean) lock}(0L, Long.MAX_VALUE, false)
Документация по Java для java.nio.channels.FileChannel.lock()
.
Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.
Применяется к
Lock(Int64, Int64, Boolean)
Получает блокировку в заданном регионе файла этого канала.
[Android.Runtime.Register("lock", "(JJZ)Ljava/nio/channels/FileLock;", "GetLock_JJZHandler")]
public abstract Java.Nio.Channels.FileLock? Lock (long position, long size, bool shared);
[<Android.Runtime.Register("lock", "(JJZ)Ljava/nio/channels/FileLock;", "GetLock_JJZHandler")>]
abstract member Lock : int64 * int64 * bool -> Java.Nio.Channels.FileLock
Параметры
- position
- Int64
Позиция, с которой начинается заблокированный регион; должно быть не отрицательным
- size
- Int64
Размер заблокированного региона; должен быть не отрицательным, и сумма position
>+>size
должна быть не отрицательной.
- shared
- Boolean
true
чтобы запросить общую блокировку, в этом случае этот канал должен быть открыт для чтения (и, возможно, записи); false
чтобы запросить монопольную блокировку, в этом случае этот канал должен быть открыт для записи (и, возможно, чтения)
Возвращаемое значение
Объект блокировки, представляющий только что полученную блокировку
- Атрибуты
Исключения
Значение , если position
или size
отрицательное.
Значение , если этот канал закрыт.
Если запрошенный регион перекрывает существующий запрос блокировки или ожидающего блокировки.
Значение true, если канал не открыт в режиме чтения, но общий доступ имеет значение true.
Значение false, если канал не открыт в режиме записи, но общий доступ имеет значение false.
Значение , если этот канал закрыт другим потоком во время выполнения этого метода.
Значение , если поток прерван в состоянии ожидания требуемой блокировки файла.
Если возникает другая ошибка ввода-вывода.
Комментарии
Получает блокировку в заданном регионе файла этого канала.
Вызов этого метода будет блокироваться до тех пор, пока регион не будет заблокирован, этот канал закрыт, или вызывающий поток прерван, в зависимости от того, что происходит в первую очередь.
Если этот канал закрывается другим потоком во время вызова этого метода, AsynchronousCloseException
создается исключение.
Если вызывающий поток прерван во время ожидания получения блокировки, его состояние прерывания будет задано, и FileLockInterruptionException
будет создано исключение. Если состояние прерывания вызывающего объекта задано при вызове этого метода, то это исключение будет создано немедленно; Состояние прерывания потока не изменится.
Регион, указанный position
size
параметрами, не должен содержаться внутри или даже перекрываться фактическим базовым файлом. Области блокировки фиксированы в размере; Если заблокированный регион изначально содержит конец файла, а файл выходит за пределы региона, то новая часть файла не будет охвачена блокировкой. Если ожидается, что размер файла увеличивается и блокировка всего файла требуется, то регион, начинающийся с нуля, и не меньше ожидаемого максимального размера файла, должен быть заблокирован. Метод нулевого аргумента #lock()
просто блокирует область размера Long#MAX_VALUE
.
Некоторые операционные системы не поддерживают общие блокировки, в этом случае запрос на общую блокировку автоматически преобразуется в запрос на монопольную блокировку. Можно ли проверить, является ли недавно приобретенная блокировка общим или эксклюзивным путем вызова метода результирующего объекта FileLock#isShared() isShared
блокировки.
Блокировки файлов хранятся от имени всей виртуальной машины Java. Они не подходят для управления доступом к файлу несколькими потоками в одной виртуальной машине.
Документация по Java для java.nio.channels.FileChannel.lock(long, long, boolean)
.
Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.