Интерфейс WatchKey
public interface WatchKey
watchable в WatchService. Ключ наблюдения создаётся при регистрации объекта наблюдения в службе наблюдения. Ключ остаётся valid до тех пор, пока:
- Он не будет отменён явным вызовом метода
cancel, или - Не будет отменён неявно, поскольку объект станет недоступен, или
- Пока служба наблюдения не будет
closing.
Ключ наблюдения имеет состояние. При создании ключ считается готовым. При обнаружении события ключ получает сигнал и помещается в очередь, чтобы его можно было извлечь, вызвав методы службы наблюдения poll или take. После получения сигнала ключ остаётся в этом состоянии, пока не будет вызван его метод reset, возвращающий ключ в готовое состояние. События, обнаруженные, пока ключ находится в состоянии сигнала, помещаются в очередь, но не приводят к повторному помещению ключа в очередь для извлечения из службы наблюдения. События извлекаются вызовом метода ключа pollEvents. Этот метод извлекает и удаляет все накопившиеся события для объекта. При создании у ключа наблюдения нет ожидающих событий. Обычно события извлекаются, когда ключ находится в состоянии сигнала, что приводит к следующему шаблону:
for (;;) {
// retrieve key
WatchKey key = watcher.take();
// process events
for (WatchEvent<?> event: key.pollEvents()) {
:
}
// reset the key
boolean valid = key.reset();
if (!valid) {
// object no longer registered
}
}
Ключи наблюдения безопасно использовать из нескольких параллельных потоков. Если несколько потоков извлекают ключи, получившие сигнал, из службы наблюдения, необходимо следить за тем, чтобы метод reset вызывался только после обработки событий для объекта. Это гарантирует, что в каждый момент времени события для объекта обрабатывает только один поток.
- Начиная с:
- 1.7
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
cancel() |
Отменяет регистрацию в службе наблюдения. |
boolean |
isValid() |
Сообщает, действителен ли этот ключ наблюдения. |
List |
pollEvents() |
Извлекает и удаляет все ожидающие события для этого ключа наблюдения и возвращает List извлечённых событий. |
boolean |
reset() |
Сбрасывает этот ключ наблюдения. |
Watchable |
watchable() |
Возвращает объект, для которого был создан этот ключ наблюдения. |
Подробное описание методов
isValid
boolean isValid()
Ключ наблюдения действителен с момента создания и остаётся действительным, пока не будет отменён или пока не будет закрыта его служба наблюдения.
- Возвращает:
-
trueтогда и только тогда, когда этот ключ наблюдения действителен
pollEvents
List<WatchEvent<?>> pollEvents()
List извлечённых событий. Обратите внимание, что этот метод не ожидает появления событий, если ожидающих событий нет.
- Возвращает:
- список извлечённых событий; может быть пустым
reset
boolean reset()
Если этот ключ наблюдения был отменён или уже находится в готовом состоянии, вызов этого метода не оказывает никакого эффекта. В противном случае, если для объекта имеются ожидающие события, этот ключ наблюдения немедленно снова помещается в очередь службы наблюдения. Если ожидающих событий нет, ключ наблюдения переводится в готовое состояние и остаётся в нём до обнаружения события или отмены ключа.
- Возвращает:
-
true, если ключ наблюдения действителен и был сброшен, иfalse, если ключ наблюдения не удалось сбросить, поскольку он больше неvalid
cancel
void cancel()
pollEvents после отмены ключа. Если этот ключ наблюдения уже был отменён, вызов этого метода не оказывает никакого эффекта. После отмены ключ наблюдения навсегда остаётся недействительным.
watchable
Watchable watchable()
Поскольку WatchService предназначен для непосредственного взаимодействия с механизмом уведомления о событиях файловой системы (если он доступен), многие подробности наблюдения за зарегистрированными объектами в значительной степени зависят от реализации. Например, при отслеживании изменений в каталоге, если каталог перемещён или переименован в файловой системе, нет гарантии, что ключ наблюдения будет отменён, поэтому объект, возвращаемый этим методом, может больше не указывать на допустимый путь к каталогу.
- Возвращает:
- объект, для которого был создан этот ключ наблюдения
© 1993, 2025, 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/25/docs/api/java.base/java/nio/file/WatchKey.html