|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.nio.channels.spi.AbstractInterruptibleChannel java.nio.channels.SelectableChannel
public abstract class SelectableChannel
Selector
経由で多重化できるチャネルです。
セレクタで使用するためには、まず、register
メソッドを使ってこのクラスのインスタンスを登録する必要があります。このメソッドは、チャネルがセレクタに登録されたことを示す新しい SelectionKey
オブジェクトを返します。
セレクタに登録されたチャネルは、登録を解除するまで登録されたままになります。登録を解除するには、セレクタによってチャネルに割り当てられたリソースを解放する必要があります。
チャネルの登録を直接解除することはできません。その代わりに、登録を表すキーを取り消します。キーを取り消すには、セレクタが次の選択を行なっている間にチャネルの登録を解除します。cancel
メソッドの呼び出しによって、キーを明示的に取り消すことができます。close
メソッドの呼び出し、またはチャネル上の入出力操作中にブロックされたスレッドに対する割り込みによってチャネルをクローズすると、必然的に、そのチャネルのすべてのキーが取り消されます。
セレクタ自体をクローズすると、チャネルの登録が解除され、その登録を示していたキーも即座に無効になります。
チャネルは特定のセレクタに対して、多くても一度しか登録できません。
チャネルが 1 つ以上のセレクタに登録されていないかどうかを確認するには、isRegistered
メソッドを呼び出します。
選択可能チャネルは、複数の並行スレッドで安全に使用できます。
isBlocking
メソッドを呼び出すことで判断できます。
新しく作成された選択可能チャネルは、常にブロックモードになります。非ブロックモードは、セレクタベースの多重化と共にもっとも有用です。セレクタに登録する前に、チャネルを非ブロックモードにし、登録解除までそのままにしておく必要があります。
SelectionKey
,
Selector
コンストラクタの概要 | |
---|---|
protected |
SelectableChannel()
このクラスの新しいインスタンスを初期化します。 |
メソッドの概要 | |
---|---|
abstract Object |
blockingLock()
configureBlocking メソッドと register メソッドが同期するオブジェクトを返します。 |
abstract SelectableChannel |
configureBlocking(boolean block)
このチャネルのブロックモードを調整します。 |
abstract boolean |
isBlocking()
このチャネル上の個々の入出力操作が前の入出力操作が完了するまでブロックされるかどうかを判断します。 |
abstract boolean |
isRegistered()
現在このチャネルがセレクタに登録されているかどうかを判断します。 |
abstract SelectionKey |
keyFor(Selector sel)
チャネルが指定されたセレクタに登録されていることを示すキーを取得します。 |
abstract SelectorProvider |
provider()
このチャネルの作成元プロバイダを返します。 |
SelectionKey |
register(Selector sel,
int ops)
このチャネルを指定されたセレクタに登録し、選択キーを返します。 |
abstract SelectionKey |
register(Selector sel,
int ops,
Object att)
このチャネルを指定されたセレクタに登録し、選択キーを返します。 |
abstract int |
validOps()
このチャネルのサポートされている操作を識別する操作セットを返します。 |
クラス java.nio.channels.spi.AbstractInterruptibleChannel から継承されたメソッド |
---|
begin, close, end, implCloseChannel, isOpen |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
インタフェース java.nio.channels.Channel から継承されたメソッド |
---|
close, isOpen |
コンストラクタの詳細 |
---|
protected SelectableChannel()
メソッドの詳細 |
---|
public abstract SelectorProvider provider()
public abstract int validOps()
public abstract boolean isRegistered()
キーの取り消しからチャネルの登録解除までの間に発生する必然的な遅延のため、キーをすべて取り消しても、しばらくの間チャネルの登録は解除されません。チャネルをクローズしたときも同様です。
public abstract SelectionKey keyFor(Selector sel)
public abstract SelectionKey register(Selector sel, int ops, Object att) throws ClosedChannelException
現在このチャネルが指定されたセレクタに登録されている場合、この登録を示す選択キーが返されます。キーの対象リストは、interestOps(int)
メソッドを呼び出した場合と同じく ops に変更されています。att 引数の値が null 以外の場合、キーの添付はその値に設定されています。キーがすでに取り消されている場合は、CancelledKeyException
がスローされます。
それ以外の場合、このチャネルは指定されたセレクタにまだ登録されていません。登録処理のあと、新しく生成されたキーが返されます。キーの対象リストの初期値は ops、添付は att になります。
このメソッドはいつでも呼び出すことができます。このメソッドの呼び出し中、または configureBlocking
メソッドの呼び出し中に重複してこのメソッドを呼び出した場合、新しく呼び出したメソッドは最初のメソッドの処理が完了するまでブロックされます。その後、このメソッドとセレクタのキーセットの同期がとられます。このため、同じセレクタを使用する別の登録または選択処理と並行して呼び出された場合、このメソッドはブロックされます。
この操作の実行中にこのチャネルがクローズした場合、このメソッドから返されるキーは取り消され、無効になります。
sel
- このチャネルの登録先セレクタops
- 結果として得られるキーの対象セットatt
- 結果として得られるキーの添付。null の場合もある
ClosedChannelException
- このチャネルがクローズしている場合
IllegalBlockingModeException
- このチャネルがブロックモードの場合
IllegalSelectorException
- このチャネルの作成元プロバイダが指定されたセレクタの作成元プロバイダと違う場合
CancelledKeyException
- チャネルは指定されたセレクタに登録されているが、対応するキーがすでに取り消されている場合
IllegalArgumentException
- ops セット内のビットがこのチャネルでサポートされる操作に対応していない場合 (set & ~validOps() != 0 の場合)public final SelectionKey register(Selector sel, int ops) throws ClosedChannelException
このメソッドを次の形式で呼び出すと、上記の動作が行われます。
sc.register(sel, ops)次の呼び出しと正確に同じ動作になります。
sc.register
(sel, ops, null)
sel
- このチャネルの登録先セレクタops
- 結果として得られるキーの対象セット
ClosedChannelException
- このチャネルがクローズしている場合
IllegalBlockingModeException
- このチャネルがブロックモードの場合
IllegalSelectorException
- このチャネルの作成元プロバイダが指定されたセレクタの作成元プロバイダと違う場合
CancelledKeyException
- チャネルは指定されたセレクタに登録されているが、対応するキーがすでに取り消されている場合
IllegalArgumentException
- ops セット内のビットがこのチャネルでサポートされる操作に対応していない場合 (set & ~validOps() != 0 の場合)public abstract SelectableChannel configureBlocking(boolean block) throws IOException
このチャネルが 1 個以上のセレクタに登録されている場合、ブロックモードに設定しようとすると、IllegalBlockingModeException
がスローされます。
このメソッドはいつでも呼び出すことができます。新しいブロックモードは、このメソッドの終了後に開始された入出力操作だけに影響を及ぼします。実装によっては、保留された入出力操作が完了するまでブロックを続行する必要があります。
このメソッドまたは register
メソッドの呼び出し中にこのメソッドを重複して呼び出した場合、新しく呼び出されたメソッドは最初の処理が完了するまでブロックされます。
block
- true の場合はこのチャネルがブロックモードになり、false の場合は非ブロックモードになる
ClosedChannelException
- このチャネルがクローズしている場合
IllegalBlockingModeException
- block が true で、このチャネルが 1 個以上のセレクタに登録されている場合
IOException
- 入出力エラーが発生した場合public abstract boolean isBlocking()
このチャネルがクローズしている場合、このメソッドの戻り値は特定されません。
public abstract Object blockingLock()
configureBlocking
メソッドと register
メソッドが同期するオブジェクトを返します。この機能は、特定のブロックモードを短時間保持する必要があるアダプタを実装する場合に便利です。
|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。