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

クラスSelectableChannel

java.lang.Object
java.nio.channels.spi.AbstractInterruptibleChannel
java.nio.channels.SelectableChannel
すべての実装されたインタフェース:
Closeable, AutoCloseable, Channel, InterruptibleChannel
直系の既知のサブクラス:
AbstractSelectableChannel

public abstract class SelectableChannel extends AbstractInterruptibleChannel implements Channel
Selector経由で多重化できるチャネルです。

セレクタで使用するためには、まず、registerメソッドを使ってこのクラスのインスタンスを登録する必要があります。 このメソッドは、セレクタへのチャネルの登録を表す新しいSelectionKeyオブジェクトを返します。

セレクタに登録されたチャネルは、登録を解除するまで登録されたままになります。 登録を解除するには、セレクタによってチャネルに割り当てられたリソースを解放する必要があります。

チャネルの登録を直接解除することはできません。その代わりに、登録を表すキーを取り消します キーを取り消すには、セレクタが次の選択を行っている間にチャネルの登録を解除します。 キーは、cancelメソッドを呼び出すことで明示的に取り消すことができます。 closeメソッドの呼び出し、またはチャネル上の入出力操作中にブロックされたスレッドに対する割り込みによってチャネルをクローズすると、必然的に、そのチャネルのすべてのキーが取り消されます。

セレクタ自体をクローズすると、チャネルの登録が解除され、その登録を示していたキーも即座に無効になります。

チャネルは特定のセレクタに対して、多くても一度しか登録できません。

チャネルが1個以上のセレクタに登録されていないかどうかを確認するには、isRegisteredメソッドを呼び出します。

選択可能チャネルは、複数の並行スレッドで安全に使用できます。

ブロック・モード

選択可能チャネルは、ブロック・モードか非ブロック・モードになります。 ブロック・モードの場合、チャネル上で呼び出された入出力操作は、前の操作が完了するまでブロックされます。 非ブロック・モードの場合、入出力操作はブロックされず、要求されたバイト数より少ないバイト数が転送されます。バイトが一切転送されない場合もあります。 選択可能チャネルがブロック・モードであるかどうかは、isBlockingメソッドを呼び出すことで判断できます。

新しく作成された選択可能チャネルは、常にブロック・モードになります。 非ブロック・モードは、セレクタ・ベースの多重化と共にもっとも有用です。 セレクタに登録する前に、チャネルを非ブロック・モードにし、登録解除までそのままにしておく必要があります。

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