モジュール java.base
パッケージ java.nio.file

インタフェースWatchKey



  • public interface WatchKey
    watchableオブジェクトがWatchServiceに登録されていることを示すトークンです。

    監視鍵は、監視可能なオブジェクトが監視サービスに登録されると作成されます。 この鍵は、次が行われるまで有効なままです。

    1. そのcancelメソッドの呼出しによって明示的に取り消される
    2. そのオブジェクトにアクセスできなくなったために暗黙的に取り消される
    3. 監視サービスを閉じることで取り消される

    監視鍵には状態があります。 最初の作成時、その鍵はreadyと呼ばれています。 イベントが検出されると、その鍵はsignalledとなり、監視サービスのpollまたはtakeメソッドの呼出しによって取得できるようにキューに入れられます。 鍵は、いったんsignalledになると、そのresetメソッドが呼び出されて鍵の状態がreadyに戻されるまで、その状態が続きます。 鍵がsignalled状態にあるときに検出されたイベントはキューに入れられますが、それによって鍵が監視サービスから取得できるように再度キューに入れられることはありません。 イベントを取得するには、鍵のpollEventsメソッドを呼び出します。 このメソッドは、そのオブジェクトに関する蓄積されたすべてのイベントを取得して削除します。 最初の作成時、監視鍵には保留中のイベントはありません。 通常、その鍵がsignalled状態になり、次のコードが実行されると、イベントが取得されます。

         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
             }
         }
     

    監視鍵は複数の並行スレッドで安全に使用できます。 監視サービスからsignalled状態の鍵を取得するスレッドがいくつか存在する場合は、そのオブジェクトに関するイベントの処理が完了したあとでのみresetメソッドが呼び出されるように注意してください。 これにより、常に1つのスレッドが1つのオブジェクトに関するイベントを処理するようになります。

    導入されたバージョン:
    1.7
    • メソッドのサマリー

      すべてのメソッド インスタンス・メソッド 抽象メソッド 
      修飾子と型 メソッド 説明
      void cancel​()
      監視サービスへの登録を取り消します。
      boolean isValid​()
      この監視鍵が有効であるかどうかを判断します。
      List<WatchEvent<?>> pollEvents​()
      この監視鍵に関するすべての保留中のイベントを取得して削除し、取得したイベントのListを返します。
      boolean reset​()
      この監視鍵をリセットします。
      Watchable watchable​()
      作成されたこの監視鍵のオブジェクトを返します。
    • メソッドの詳細

      • isValid

        boolean isValid​()
        この監視鍵が有効であるかどうかを判断します。

        監視鍵は作成時に有効になり、それが取り消されるか、その監視サービスが閉じられるまで有効な状態が続きます。

        戻り値:
        この監視鍵が有効である場合にかぎりtrue
      • pollEvents

        List<WatchEvent<?>> pollEvents​()
        この監視鍵に関するすべての保留中のイベントを取得して削除し、取得したイベントのListを返します。

        このメソッドは保留中のイベントがない場合は待機しないので注意してください。

        戻り値:
        取得したイベントのリスト。空の場合もある
      • reset

        boolean reset​()
        この監視鍵をリセットします。

        この監視鍵が取り消されている場合、またはこの監視鍵がすでにready状態にある場合は、このメソッドを呼び出しても何の効果もありません。 それ以外の場合、そのオブジェクトに関する保留中のイベントがあれば、この監視鍵はただちに監視サービスのキューに再度入れられます。 保留中のイベントがなければ、その監視鍵はready状態になり、イベントが検出されるか、その監視鍵が取り消されるまでその状態が続きます。

        戻り値:
        監視鍵が有効でリセットされた場合はtrue。監視鍵が有効ではなくなっているためにリセットできなかった場合はfalse
      • cancel

        void cancel​()
        監視サービスへの登録を取り消します。 復帰すると、監視鍵は無効になります。 監視鍵がキューに入っていて、監視サービスから取得されるのを待機している場合、それは削除されるまでキューの中に残ります。 保留中のイベントがあれば、それは保留状態のままとなり、その鍵が取り消されたあともpollEventsメソッドを呼び出して取得できます。

        この監視鍵がすでに取り消されている場合は、このメソッドを呼び出しても何の効果もありません。 いったん取り消された監視鍵は以後永久に無効です。

      • watchable

        Watchable watchable​()
        作成されたこの監視鍵のオブジェクトを返します。 このメソッドは、その鍵が取り消されたあともオブジェクトを返し続けます。

        WatchServiceはネイティブ・ファイル・イベント通知機能(使用可能な場合)に直接マップするよう意図されているため、登録されたオブジェクトの監視方法に関する詳細の多くは実装によって大きく異なります。 たとえば、ディレクトリの変更を監視しているときに、そのディレクトリをファイル・システム内で移動または名前変更した場合、監視鍵が取り消されるという保証はないため、このメソッドで返されるオブジェクトがそのディレクトリへの有効なパスでなくなっている可能性があります。

        戻り値:
        作成されたこの監視鍵のオブジェクト