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

クラスSelectionKey

java.lang.Object
java.nio.channels.SelectionKey
直系の既知のサブクラス:
AbstractSelectionKey

public abstract class SelectionKey extends Object
SelectableChannelSelectorに登録されていることを示すトークンです。

チャネルをセレクタに登録するたびに、選択キーが作成されます。 このキーは、cancelメソッドの呼び出しや、チャネルまたはセレクタのクローズによって取り消されるまで有効です。 取り消されたキーがただちにセレクタから削除されるわけではありません。取り消されたキーは、次の選択操作中に、削除のためにセレクタの取り消されたキー・セットに追加されます。 キーの有効性は、isValidメソッドを呼び出すことによってテストできます。

選択キーには、整数値で表された2つの操作セットがあります。 操作セットのビットは、キーのチャネルによってサポートされている選択可能な操作のカテゴリを示します。

  • 対象セットは、次回セレクタの選択メソッドの1つを呼び出したときに実行可能性をテストする操作カテゴリを決定します。 対象セットは、キーの作成時に初期化され、指定された値になります。この値は、後でinterestOps(int)メソッドを使って変更できます。

  • 実行可能セットは、キーのセレクタによって検出された実行可能なキーのチャネルの操作カテゴリを識別します。 実行可能セットは、キーの作成時に初期化され、ゼロになります。この値は、その後の選択操作中にセレクタで更新できますが、直接更新することはできません。

選択キーの実行可能セットは、そのチャネルがある操作カテゴリを実行できる状態になっていることを示します。 ただし、これは単なるヒントであって、スレッドがブロックされることなくそのカテゴリの操作を実行できることを保証するわけではありません。 通常、実行可能セットは、選択操作完了直後は正確ですが、外部イベントや対応するチャネル上で呼び出される入出力操作によって不正確になる可能性があります。

このクラスは既知のすべての操作セット・ビットを定義しますが、どのビットが指定されたチャネルによってサポートされるかは、正確にはチャネルの種類によって異なります。 SelectableChannelの各サブクラスは、チャネルでサポートされている操作のみを識別するセットを返すvalidOps()メソッドを定義します。 キーのチャネルによってサポートされていない操作セット・ビットを設定またはテストしようとすると、適切な実行時例外がスローされます。

多くの場合、アプリケーション固有のデータを選択キーに関連付ける必要があります。たとえば、あるプロトコルを実装するために、その上位プロトコルの状態を示し、実行可能通知を処理するオブジェクトがこれに該当します。 このため、選択キーは、単一の任意オブジェクトをキーに添付する機能をサポートしています。 attachメソッドでオブジェクトを添付した後、attachmentメソッドでこのオブジェクトを取得できます。

選択キーは複数の並行スレッドで安全に使用できます。 選択操作では、操作開始時点で現在だった関心セット値が常に使用されます。

導入されたバージョン:
1.4
関連項目: