模块 java.base

接口 WatchKey


public interface WatchKey
代表 watchable 对象与 WatchService 的注册的令牌。

当可观察对象注册到观察服务时,会创建一个观察键。密钥保持 valid 直到:

  1. 它通过调用其 cancel 方法显式取消,或者
  2. 隐式取消,因为对象不再可访问,或者
  3. 通过 closing 手表服务。

手表钥匙有一个状态。最初创建时,密钥被称为 ready 。当检测到事件时,密钥是 signalled 并排队,以便可以通过调用监视服务的 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
    取消手表服务的注册。
    boolean
    告知此手表密钥是否有效。
    检索并删除此监视键的所有未决事件,返回检索到的事件的 List
    boolean
    重置此观察键。
    返回为其创建此监视键的对象。
  • 方法详情

    • isValid

      boolean isValid()
      告知此手表密钥是否有效。

      watch key 在创建时有效,并一直保留到它被取消,或者它的 watch 服务被关闭。

      返回:
      true 当且仅当此手表密钥有效
    • pollEvents

      List <WatchEvent <?>> pollEvents()
      检索并删除此监视键的所有未决事件,返回检索到的事件的 List

      请注意,如果没有待处理的事件,则此方法不会等待。

      返回:
      检索到的事件列表;可能是空的
    • reset

      boolean reset()
      重置此观察键。

      如果这个 watch key 已经被取消或者这个 watch key 已经处于 ready 状态那么调用这个方法是没有效果的。否则,如果该对象有未决事件,则此监视键会立即重新排队到监视服务。如果没有未决事件,则监视键进入就绪状态并将保持该状态直到检测到事件或监视键被取消。

      返回:
      true 如果手表密钥有效且已重置,false 如果手表密钥无法重置,因为它不再是 valid
    • cancel

      void cancel()
      取消手表服务的注册。返回后手表钥匙将失效。如果 watch 键已入队,等待从 watch 服务中检索,那么它将保留在队列中直到被删除。未决事件(如果有)保持未决状态,并且可以在取消密钥后调用 pollEvents 方法来检索。

      如果这个 watch key 已经被取消,那么调用这个方法是没有效果的。一旦取消,手表密钥将永远无效。

    • watchable

      Watchable  watchable()
      返回为其创建此监视键的对象。即使取消键后,此方法仍将继续返回对象。

      由于 WatchService 旨在直接映射到本机文件事件通知工具(如果可用),因此有关如何监视已注册对象的许多细节都是高度特定于实现的。例如,当监视一个目录的变化,并且该目录在文件系统中被移动或重命名时,不能保证监视键将被取消,因此此方法返回的对象可能不再是该目录的有效路径.

      返回:
      为其创建此监视密钥的对象