public abstract class AbstractSelectableChannel extends SelectableChannel
このクラスは、チャネルの登録、登録解除、クローズの処理を行うメソッドを定義します。このクラスは、このチャネルの現在のブロック・モードと、現在の選択キー・セットを管理します。また、SelectableChannel
の仕様を実装するのに必要な同期処理をすべて実行します。このクラスに定義されているabstract protectedメソッドの実装では、同じ操作を使用するほかのスレッドとの同期処理を行う必要はありません。
修飾子 | コンストラクタと説明 |
---|---|
protected |
AbstractSelectableChannel(SelectorProvider provider)
このクラスの新しいインスタンスを初期化します。
|
修飾子と型 | メソッドと説明 |
---|---|
Object |
blockingLock()
configureBlocking およびregister メソッドが同期するオブジェクトを取得します。 |
SelectableChannel |
configureBlocking(boolean block)
このチャネルのブロック・モードを調整します。
|
protected void |
implCloseChannel()
現在のチャネルをクローズします。
|
protected abstract void |
implCloseSelectableChannel()
この選択可能チャネルをクローズします。
|
protected abstract void |
implConfigureBlocking(boolean block)
このチャネルのブロック・モードを調整します。
|
boolean |
isBlocking()
このチャネル上の個々の入出力操作が前の入出力操作が完了するまでブロックされるかどうかを判断します。
|
boolean |
isRegistered()
現在このチャネルがセレクタに登録されているかどうかを判断します。
|
SelectionKey |
keyFor(Selector sel)
チャネルが指定されたセレクタに登録されていることを示すキーを取得します。
|
SelectorProvider |
provider()
このチャネルの作成元プロバイダを返します。
|
SelectionKey |
register(Selector sel, int ops, Object att)
このチャネルを指定されたセレクタに登録し、選択キーを返します。
|
register, validOps
begin, close, end, isOpen
protected AbstractSelectableChannel(SelectorProvider provider)
provider
- このチャネルの作成元プロバイダpublic final SelectorProvider provider()
provider
、クラス: SelectableChannel
public final boolean isRegistered()
SelectableChannel
キーの取り消しからチャネルの登録解除までの間に発生する必然的な遅延のため、キーをすべて取り消しても、しばらくの間チャネルの登録は解除されません。チャネルをクローズしたときも同様です。
isRegistered
、クラス: SelectableChannel
public final SelectionKey keyFor(Selector sel)
SelectableChannel
keyFor
、クラス: SelectableChannel
sel
- セレクタpublic final SelectionKey register(Selector sel, int ops, Object att) throws ClosedChannelException
このメソッドは、最初にこのチャネルがオープンしていることと、指定された初期対象セットが有効であることを確認します。
このチャネルが指定されたセレクタに登録されている場合、その対象セットが指定された値に設定され、登録を示す選択キーが返されます。
それ以外の場合、このチャネルは指定されたセレクタにまだ登録されていないので、適切なロックを保持した状態でセレクタのregister
メソッドが呼び出されます。結果として得られるキーは、返される前に、このチャネルのキー・セットに追加されます。
register
、クラス: SelectableChannel
sel
- このチャネルの登録先セレクタops
- 結果として得られるキーの対象セットatt
- 結果として得られるキーの添付。nullの場合もあるClosedSelectorException
- セレクタがクローズしている場合IllegalBlockingModeException
- このチャネルがブロック・モードの場合IllegalSelectorException
- このチャネルの作成元プロバイダが指定されたセレクタの作成元プロバイダと違う場合CancelledKeyException
- チャネルは指定されたセレクタに登録されているが、対応するキーがすでに取り消されている場合IllegalArgumentException
- opsセット内のビットがこのチャネルでサポートされる操作に対応していない場合(set & ~validOps() != 0
の場合)ClosedChannelException
- このチャネルがクローズしている場合protected final void implCloseChannel() throws IOException
このメソッドは、AbstractInterruptibleChannel
クラスで指定されており、close
メソッドによって呼び出されたあと、このチャネルを実際にクローズする処理を行うためにimplCloseSelectableChannel
メソッドを呼び出します。次に、このチャネルのキーをすべて取り消します。
implCloseChannel
、クラス: AbstractInterruptibleChannel
IOException
- チャネルのクローズ中に入出力エラーが発生した場合protected abstract void implCloseSelectableChannel() throws IOException
このメソッドは、チャネルをクローズする実際の処理を実行するためにclose
メソッドによって呼び出されます。このメソッドは、チャネルがまだクローズしていない場合にのみ呼び出され、2回以上呼び出されることはありません。
このメソッドの実装は、このチャネルに対する入出力操作の途中でブロックされるその他のスレッドを、例外をスローするか、通常の方法を使ってただちに終了させることになっています。
IOException
- 入出力エラーが発生した場合public final boolean isBlocking()
SelectableChannel
このチャネルがクローズしている場合、このメソッドの戻り値は特定されません。
isBlocking
、クラス: SelectableChannel
public final Object blockingLock()
SelectableChannel
configureBlocking
およびregister
メソッドが同期するオブジェクトを取得します。この機能は、特定のブロック・モードを短時間保持する必要があるアダプタを実装する場合に便利です。blockingLock
、クラス: SelectableChannel
public final SelectableChannel configureBlocking(boolean block) throws IOException
指定されたブロック・モードが現在のブロック・モードと異なっている場合、このメソッドは、適切なロックを保持した状態でimplConfigureBlocking
メソッドを呼び出してモードを変更します。
configureBlocking
、クラス: SelectableChannel
block
- trueの場合はこのチャネルがブロック・モードになり、falseの場合は非ブロック・モードになるClosedChannelException
- このチャネルがクローズしている場合IOException
- 入出力エラーが発生した場合protected abstract void implConfigureBlocking(boolean block) throws IOException
このメソッドは、ブロック・モードを変更する実際の処理を実行するためにconfigureBlocking
メソッドによって呼び出されます。このメソッドは、新しいモードが現在のモードと異なっている場合に限り呼び出されます。
block
- trueの場合はこのチャネルがブロック・モードになり、falseの場合は非ブロック・モードになるIOException
- 入出力エラーが発生した場合 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.