モジュール 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