Интерфейс WatchService
- Все суперинтерфейсы:
-
AutoCloseable,Closeable
public interface WatchService extends Closeable
Объект Watchable регистрируется в службе отслеживания путём вызова его метода register, возвращающего WatchKey для представления регистрации. Когда обнаруживается событие для объекта, ключ сигнализируется, и если он не сигнализируется в настоящее время, он помещается в очередь службы отслеживания, чтобы его могли получить потребители, которые вызывают методы poll или take для получения ключей и обработки событий. После обработки событий потребитель вызывает метод ключа reset для сброса ключа, что позволяет ключу быть сигнализированным и повторно помещённым в очередь с дальнейшими событиями.
Регистрация в службе отслеживания отменяется путём вызова метода ключа cancel. Ключ, помещённый в очередь в момент отмены, остаётся в очереди до тех пор, пока он не будет получен. В зависимости от объекта, ключ может быть отменён автоматически. Например, предположим, что директория отслеживается, и служба отслеживания обнаруживает, что она была удалена или её файловая система больше недоступна. Когда ключ отменяется таким образом, он сигнализируется и помещается в очередь, если он не сигнализирован в данный момент. Чтобы гарантировать, что потребитель будет уведомлён, возвращаемое значение метода reset указывает, является ли ключ допустимым.
Служба отслеживания безопасна для использования несколькими одновременными потребителями. Чтобы гарантировать, что только один потребитель обрабатывает события для конкретного объекта в любой момент времени, следует позаботиться о том, чтобы метод ключа reset вызывался только после обработки его событий. Метод close может быть вызван в любое время для закрытия службы, заставляя любые потоки, ожидающие получения ключей, бросить исключение
ClosedWatchServiceException.
Файловые системы могут сообщать о событиях быстрее, чем они могут быть получены или обработаны, и реализация может наложить неопределённое ограничение на количество событий, которые она может накапливать. В случае, если реализация известно отбрасывает события, она организует, чтобы метод ключа pollEvents возвращал элемент с типом события OVERFLOW. Это событие может использоваться потребителем в качестве триггера для повторного анализа состояния объекта.
Когда событие сообщает о том, что файл в отслеживаемой директории был изменён, нет гарантии, что программа (или программы), которые внесли изменения в файл, завершили свою работу. Следует соблюдать осторожность при координации доступа с другими программами, которые могут обновлять файл. Класс FileChannel определяет методы для блокировки областей файла от доступа других программ.
Зависимости от платформы
Реализация, которая наблюдает события из файловой системы, предназначена для непосредственного отображения на локальный механизм уведомления о файловых событиях, где это возможно, или для использования примитивного механизма, такого как опроса, когда локальный механизм недоступен. Вследствие этого, многие детали о том, как обнаруживаются события, их своевременность и сохраняется ли их порядок, зависят от конкретной реализации. Например, при модификации файла в отслеживаемой директории в некоторых реализациях это может привести к одному событию ENTRY_MODIFY, а в других реализациях — к нескольким событиям. Кратковременные файлы (то есть файлы, которые удаляются очень быстро после создания) могут не быть обнаружены примитивными реализациями, которые периодически опрашивают файловую систему для обнаружения изменений.
Если отслеживаемый файл не находится на локальном накопителе, то обнаружение изменений в файле зависит от конкретной реализации. В частности, не требуется, чтобы изменения файлов, выполненные на удалённых системах, обнаруживались.
- С:
- 1.7
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
close() |
Закрывает эту службу отслеживания. |
WatchKey |
poll() |
Получает и удаляет следующий ключ отслеживания или null, если таких нет. |
WatchKey |
poll |
Получает и удаляет следующий ключ отслеживания, ожидая, если необходимо, до указанного времени ожидания, если ключей ещё нет. |
WatchKey |
take() |
Получает и удаляет следующий ключ отслеживания, ожидая, если таких нет. |
Подробное описание методов
close
void close() throws IOException
Если поток в настоящее время заблокирован в методах take или poll, ожидая, пока ключ не будет помещен в очередь, то он сразу же получает исключение ClosedWatchServiceException. Любые допустимые ключи, связанные с этой службой отслеживания, являются invalidated.
После закрытия службы отслеживания любые дальнейшие попытки вызова операций над ней будут вызывать исключение ClosedWatchServiceException. Если эта служба отслеживания уже закрыта, то вызов этого метода не окажет никакого влияния.
- Определено в:
-
closeв интерфейсеAutoCloseable - Определено в:
-
closeв интерфейсеCloseable - Исключения:
-
IOException- если произошла ошибка ввода-вывода
poll
WatchKey poll()
null если таких нет.- Возвращает:
- следующий ключ отслеживания, или
null - Исключения:
-
ClosedWatchServiceException- если эта служба отслеживания закрыта
poll
WatchKey poll(long timeout, TimeUnit unit) throws InterruptedException
- Параметры:
-
timeout- время ожидания до отказа, в единицах unit -
unit-TimeUnitопределяющий интерпретацию параметра времени ожидания - Возвращает:
- следующий ключ отслеживания, или
null - Исключения:
-
ClosedWatchServiceException- если эта служба отслеживания закрыта или закрывается во время ожидания следующего ключа -
InterruptedException- если прервано ожидание
take
WatchKey take() throws InterruptedException
- Возвращает:
- следующий ключ отслеживания
- Исключения:
-
ClosedWatchServiceException- если эта служба отслеживания закрыта или закрывается во время ожидания следующего ключа -
InterruptedException- если прервано ожидание
© 1993, 2021, 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/17/docs/api/java.base/java/nio/file/WatchService.html