public interface WatchKey
watchableオブジェクトがWatchServiceに登録されていることを示すトークンです。
監視鍵は、監視可能なオブジェクトが監視サービスに登録されると作成されます。この鍵は、次が行われるまで有効なままです。
監視鍵には状態があります。最初の作成時、その鍵は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つのオブジェクトに関するイベントを処理するようになります。
| 修飾子と型 | メソッドと説明 |
|---|---|
void |
cancel()
監視サービスへの登録を取り消します。
|
boolean |
isValid()
この監視鍵が有効であるかどうかを判断します。
|
List<WatchEvent<?>> |
pollEvents()
この監視鍵に関するすべての保留中のイベントを取得して削除し、取得したイベントの
Listを返します。 |
boolean |
reset()
この監視鍵をリセットします。
|
Watchable |
watchable()
作成されたこの監視鍵のオブジェクトを返します。
|
boolean isValid()
監視鍵は作成時に有効になり、それが取り消されるか、その監視サービスが閉じられるまで有効な状態が続きます。
trueList<WatchEvent<?>> pollEvents()
Listを返します。
このメソッドは保留中のイベントがない場合は待機しないので注意してください。
boolean reset()
この監視鍵が取り消されている場合、またはこの監視鍵がすでにready状態にある場合は、このメソッドを呼び出しても何の効果もありません。それ以外の場合、そのオブジェクトに関する保留中のイベントがあれば、この監視鍵はただちに監視サービスのキューに再度入れられます。保留中のイベントがなければ、その監視鍵はready状態になり、イベントが検出されるか、その監視鍵が取り消されるまでその状態が続きます。
true。監視鍵が有効ではなくなっているためにリセットできなかった場合はfalsevoid cancel()
pollEventsメソッドを呼び出して取得できます。
この監視鍵がすでに取り消されている場合は、このメソッドを呼び出しても何の効果もありません。いったん取り消された監視鍵は以後永久に無効です。
Watchable watchable()
WatchServiceはネイティブ・ファイル・イベント通知機能(使用可能な場合)に直接マップするよう意図されているため、登録されたオブジェクトの監視方法に関する詳細の多くは実装によって大きく異なります。たとえば、ディレクトリの変更を監視しているときに、そのディレクトリをファイル・システム内で移動または名前変更した場合、監視鍵が取り消されるという保証はないため、このメソッドで返されるオブジェクトがそのディレクトリへの有効なパスでなくなっている可能性があります。
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.