Spec-Zone.ru › OpenJDK 21

Интерфейс 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
См. также:
  • FileSystem.newWatchService()

Краткое описание методов

Модификатор и тип Метод Описание
void close()
Закрывает эту службу наблюдения.
WatchKey poll()
Извлекает и удаляет следующий ключ наблюдения или null, если таковых нет.
WatchKey poll(long timeout, TimeUnit unit)
Извлекает и удаляет следующий ключ наблюдения, ожидая, если необходимо, до указанного времени ожидания, если таковых еще нет.
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, 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/file/WatchService.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API