模块  java.base
软件包  java.nio.file

Interface WatchKey


  • public interface WatchKey
    表示使用WatchService注册watchable对象的标记

    当监视服务注册可观察对象时,会创建监视密钥。 关键仍然是valid直到:

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

    表键具有状态。 最初创建时,密钥据说已准备就绪 当检测到事件时,将发信号通知密钥并对其进行排队,以便可以通过调用监视服务的polltake方法来检索该密钥。 一旦发出信号,密钥将保持此状态,直到调用其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
    • 方法详细信息

      • isValid

        boolean isValid()
        判断此监视键是否有效。

        手表密钥在创建时有效,一直保留到取消,或其监视服务关闭。

        结果
        true当且仅当此监视密钥有效时
      • pollEvents

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

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

        结果
        检索到的事件列表; 可能是空的
      • reset

        boolean reset()
        重置此监视键。

        如果此监视键已被取消或此监视键已处于就绪状态,则调用此方法无效。 否则,如果对象存在待处理事件,则此监视密钥将立即重新排队到监视服务。 如果没有待处理事件,则表键处于就绪状态,并将保持该状态,直到检测到事件或取消监视键。

        结果
        true如果监视键有效且已复位,则 false如果监视键无法复位,因为它不再是 valid
      • cancel

        void cancel()
        取消观看服务的注册。 返回时,表键无效。 如果监视密钥已入队,等待从监视服务检索,则它将保留在队列中,直到将其删除。 待处理事件(如果有)保持挂起状态,可以在取消密钥后通过调用pollEvents方法来检索。

        如果此监视键已被取消,则调用此方法无效。 一旦取消,手表密钥将永远无效。

      • watchable

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

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

        结果
        为此watch键创建的对象