Selector クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
オブジェクトの SelectableChannel
マルチプレクサー。
[Android.Runtime.Register("java/nio/channels/Selector", DoNotGenerateAcw=true)]
public abstract class Selector : Java.Lang.Object, IDisposable, Java.Interop.IJavaPeerable, Java.IO.ICloseable
[<Android.Runtime.Register("java/nio/channels/Selector", DoNotGenerateAcw=true)>]
type Selector = class
inherit Object
interface ICloseable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 継承
- 派生
- 属性
- 実装
注釈
オブジェクトの SelectableChannel
マルチプレクサー。
セレクターは、システムの既定値java.nio.channels.spi.SelectorProvider selector provider
を使用して新しいセレクターを#open open
作成するこのクラスのメソッドを呼び出すことによって作成できます。 セレクターは、カスタム セレクター プロバイダーのメソッドを java.nio.channels.spi.SelectorProvider#openSelector openSelector
呼び出すことによって作成することもできます。 セレクターは、メソッドによって #close close
閉じられるまで開いたままです。
"ks">
セレクターに対する選択可能なチャネルの登録は、オブジェクトによって SelectionKey
表されます。 セレクターは、次の 3 つの選択キーセットを保持します。
<ul>
<李>
キー セットには、このセレクターの現在のチャネル登録を表すキーが含まれています。 このセットはメソッドによって #keys() keys
返されます。
</李>
<李>
選択されたキー セットは、各キーのチャネルが、セット内のキーを追加したりキーを更新したりする前の選択操作の間に、キーの対象セットで特定された操作の少なくとも 1 つに対して準備ができていることが検出されるようにするキーのセットです。 このセットはメソッドによって #selectedKeys() selectedKeys
返されます。 選択したキー セットは、常にキー セットのサブセットです。
</李>
<李>
cancelled-key セットは、取り消されたがチャネルがまだ登録解除されていないキーのセットです。 このセットには直接アクセスできません。 取り消されたキー セットは、常にキー セットのサブセットです。
</李>
</ul>
新しく作成されたセレクターでは、3 つのセットはすべて空です。
チャネルのメソッドを使用してチャネルを登録する副作用として、セレクターのキー セットにキーが SelectableChannel#register(Selector,int) register
追加されます。 取り消されたキーは、選択操作中にキー セットから削除されます。 キー セット自体は直接変更できません。
チャネルを閉じるか、メソッドを呼び出すかに関係なく、キャンセルされると、セレクターの cancelled-key セットにキーが SelectionKey#cancel cancel
追加されます。 キーを取り消すと、次の選択操作中にチャネルが登録解除され、その時点でキーがセレクターのすべてのキー セットから削除されます。
"sks">
キーは、選択操作によって選択されたキー セットに追加されます。 キーは、セットのメソッドを呼び出すか、セットから取得したメソッドを呼び出java.util.Iterator#remove() remove
すことによって、java.util.Iterator iterator
選択したキー セットjava.util.Set#remove(java.lang.Object) remove
から直接削除できます。 選択したキー セットからすべてのキーを削除するには、セットの java.util.Set#clear() clear
メソッドを呼び出します。 選択したキー セットにキーを直接追加することはできません。
"selop"><h2>Selection</h2>
選択操作では、基になるオペレーティング システムに対して、登録されている各チャネルの準備状況に関する更新を照会して、キーの関心セットによって識別される操作を実行します。 選択操作には、次の 2 つの形式があります。
<ol>
<李>
#select(long)
、および#selectNow()
メソッドは#select()
、選択したキー セットに操作を実行する準備ができているチャネルのキーを追加するか、選択したキー セットに既に含まれているキーの準備完了操作セットを更新します。
</李>
<李>
、および#selectNow(Consumer)
メソッドは#select(Consumer)
、操作を実行する準備ができている各チャネルのキーに対してアクションを実行します。 #select(Consumer, long)
これらのメソッドは、選択したキー セットには追加されません。
</李>
</ol>
<h3>選択キー セット</h3 に追加する選択操作>
選択操作のたびに、セレクターの選択キー セットにキーを追加したり、セレクターの選択キー セットからキーを削除したり、キーセットや取り消しキー セットから削除したりできます。 選択は、メソッド #select(long)
、および#selectNow()
メソッドによって#select()
実行され、次の 3 つの手順が含まれます。
<ol>
<李>
取り消されたキー セット内の各キーは、メンバーである各キー セットから削除され、そのチャネルは登録解除されます。 この手順では、cancelled キー セットは空のままになります。
</李>
<李>
基になるオペレーティング システムは、選択操作が開始された時点でキーの関心セットによって識別される操作を実行するために、残りの各チャネルの準備状況に関する更新プログラムを照会します。 このような操作の少なくとも 1 つの準備ができているチャネルでは、次の 2 つのアクションのいずれかが実行されます。
<ol>
<李>
チャネルのキーがまだ選択されたキー セットに含まれていない場合は、そのセットに追加され、その準備完了操作セットが変更され、チャネルが準備完了と報告された操作を正確に識別します。 準備完了セットに以前に記録された準備情報はすべて破棄されます。
</李>
<李>
それ以外の場合、チャネルのキーは既に選択されたキー セット内に存在するため、その準備完了操作セットが変更され、チャネルが準備完了と報告された新しい操作が識別されます。 準備完了セットに以前に記録された準備情報はすべて保持されます。つまり、基になるシステムによって返される準備完了セットは、キーの現在の準備完了セットにビットごとの不整合が発生します。
</李>
</ol>
この手順の開始時にキー セット内のすべてのキーに空の関心セットがある場合、選択したキー セットも、キーの準備完了操作セットも更新されません。
<李>
手順 (2) の進行中に cancelled キー セットにキーが追加された場合は、手順 (1) のように処理されます。
</李>
</ol>
選択操作が 1 つ以上のチャネルの準備が整うのを待つのをブロックするかどうかと、その場合は、3 つの選択方法の唯一の重要な違いです。
<h3>選択したキー</h3 に対してアクションを実行する選択操作>
選択操作のたびに、セレクターのキー、選択したキー、および取り消されたキー セットからキーを削除できます。 選択は、メソッド #select(Consumer,long)
、および#selectNow(Consumer)
メソッドによって#select(Consumer)
実行され、次の 3 つの手順が含まれます。
<ol>
<李>
取り消されたキー セット内の各キーは、メンバーである各キー セットから削除され、そのチャネルは登録解除されます。 この手順では、cancelled キー セットは空のままになります。
</李>
<李>
基になるオペレーティング システムは、選択操作が開始された時点でキーの関心セットによって識別される操作を実行するために、残りの各チャネルの準備状況に関する更新プログラムを照会します。
このような操作の少なくとも 1 つの準備ができているチャネルの場合、チャネルのキーの準備完了操作セットは、チャネルの準備ができている操作を正確に識別するように設定され、チャネルのキーを使用するためにメソッドにselect
指定されたアクションが呼び出されます。 既に準備完了セットに記録されていた準備情報は、アクションを呼び出す前に破棄されます。
または、チャネルが複数の操作の準備ができている場合は、チャネルの キーと準備完了操作セットをチャネルの準備ができている操作のサブセットに変更して、アクション を複数回呼び出すことができます。 同じキーに 対してアクション が複数回呼び出された場合、その準備完了操作セットには、同じ選択操作の前のアクション呼び出し時に セットに含まれていた操作 ビットが含まれることはありません。
</李>
<李>
手順 (2) の進行中に cancelled キー セットにキーが追加された場合は、手順 (1) のように処理されます。
</李>
</ol>
<h2>Concurrency</h2>
セレクターとそのキー セットは、複数の同時実行スレッドで安全に使用できます。 ただし、選択されたキー セットと cancelled-key セットは選択されていません。
選択操作は、選択したキー セットのセレクター自体で、その順序で同期されます。 また、上記の手順 (1) と (3) の間に、取り消されたキー セットで同期します。
選択操作の進行中にセレクターのキーの関心セットに加えられた変更は、その操作には影響しません。これらは、次の選択操作で表示されます。
キーは取り消され、チャネルはいつでも閉じられる場合があります。 そのため、セレクターの 1 つ以上のキー セットにキーが存在しても、キーが有効であるか、そのチャネルが開いているという意味ではありません。 アプリケーション コードでは、別のスレッドがキーを取り消したりチャネルを閉じたりする可能性がある場合は、必要に応じてこれらの条件を同期して確認するように注意する必要があります。
選択操作でブロックされたスレッドは、次の 3 つの方法のいずれかで他のスレッドによって中断される可能性があります。
<ul>
<李>
セレクター #wakeup wakeup
のメソッドを呼び出すことによって、
</李>
<李>
セレクター #close close
のメソッドを呼び出すことによって、または
</李>
<李>
ブロックされたスレッドの java.lang.Thread#interrupt() interrupt
メソッドを呼び出すことで、その割り込み状態が設定され、セレクターの #wakeup wakeup
メソッドが呼び出されます。
</李>
</ul>
このメソッドは #close close
、選択操作と同じ順序でセレクターとその選択キー セットで同期します。
"ksc">
セレクターのキー セットは、複数の同時実行スレッドで安全に使用できます。 キー セットからの取得操作は通常ブロックされないため、セットに追加する新しい登録や、セットからキーを削除する選択操作のキャンセル手順と重複する可能性があります。 反復子と分割子は、反復子/分割子の作成後のある時点でのセットの状態を反映する要素を返します。 彼らは投げ java.util.ConcurrentModificationException ConcurrentModificationException
ません.
"sksc">
セレクターの選択キー セットは、通常、複数の同時実行スレッドで安全に使用できません。 このようなスレッドがセットを直接変更する可能性がある場合は、セット自体で同期することによってアクセスを制御する必要があります。 セットのjava.util.Set#iterator() iterator
メソッドによって返される反復子はフェイル ファストです。反復子の作成後にセットが変更された場合、反復子の独自java.util.Iterator#remove() remove
のメソッドを呼び出す以外は何らかの方法で、a java.util.ConcurrentModificationException
がスローされます。
1.4 で追加されました。
の Java ドキュメントjava.nio.channels.Selector
このページの一部は、Android オープンソース プロジェクトによって作成および共有され、クリエイティブ コモンズ 2.5 属性ライセンスに記載されている条件に従って使用される作業に基づく変更です。
コンストラクター
Selector() |
このクラスの新しいインスタンスを初期化します。 |
Selector(IntPtr, JniHandleOwnership) |
JNI オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。 |
プロパティ
Class |
この |
Handle |
基になる Android インスタンスへのハンドル。 (継承元 Object) |
IsOpen |
このセレクターが開いているかどうかを示します。 |
JniIdentityHashCode |
オブジェクトの |
JniPeerMembers |
オブジェクトの |
PeerReference |
オブジェクトの |
ThresholdClass |
この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。 |
ThresholdType |
この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。 |
メソッド
Clone() |
このオブジェクトのコピーを作成して返します。 (継承元 Object) |
Close() |
このセレクターを閉じます。 |
Dispose() |
オブジェクトの |
Dispose(Boolean) |
オブジェクトの |
Equals(Object) |
他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。 (継承元 Object) |
GetHashCode() |
オブジェクトのハッシュ コード値を返します。 (継承元 Object) |
JavaFinalize() |
オブジェクトへの参照がなくなったとガベージ コレクションによって判断されたときに、オブジェクトのガベージ コレクターによって呼び出されます。 (継承元 Object) |
Keys() |
このセレクターのキー セットを返します。 |
Notify() |
このオブジェクトのモニターで待機している 1 つのスレッドを起動します。 (継承元 Object) |
NotifyAll() |
このオブジェクトのモニターで待機しているすべてのスレッドを起動します。 (継承元 Object) |
Open() |
セレクターを開きます。 |
Provider() |
このチャネルを作成したプロバイダーを返します。 |
Select() |
対応するチャネルが I/O 操作の準備ができているキーのセットを選択します。 |
Select(IConsumer, Int64) |
対応するチャネルが I/O 操作の準備ができているキーに対してアクションを選択して実行します。 |
Select(IConsumer) |
対応するチャネルが I/O 操作の準備ができているキーに対してアクションを選択して実行します。 |
Select(Int64) |
対応するチャネルが I/O 操作の準備ができているキーのセットを選択します。 |
SelectedKeys() |
このセレクターの選択されたキー セットを返します。 |
SelectNow() |
対応するチャネルが I/O 操作の準備ができているキーのセットを選択します。 |
SelectNow(IConsumer) |
対応するチャネルが I/O 操作の準備ができているキーに対してアクションを選択して実行します。 |
SetHandle(IntPtr, JniHandleOwnership) |
Handle プロパティを設定します。 (継承元 Object) |
ToArray<T>() |
オブジェクトの |
ToString() |
オブジェクトの文字列表現を返します。 (継承元 Object) |
UnregisterFromRuntime() |
オブジェクトの |
Wait() |
現在のスレッドが目覚めるまで待機させます。通常<は、通知<>/em> または <em>割り込み/em> を受け<取ります。 (継承元 Object) |
Wait(Int64, Int32) |
現在のスレッドが目覚めるまで待機します。通常<><は、通知/em> または <em>中断</em> によって、または一定のリアルタイムが経過するまで待機します。 (継承元 Object) |
Wait(Int64) |
現在のスレッドが目覚めるまで待機します。通常<><は、通知/em> または <em>中断</em> によって、または一定のリアルタイムが経過するまで待機します。 (継承元 Object) |
Wakeup() |
まだ返されていない最初の選択操作をすぐに返します。 |
明示的なインターフェイスの実装
IJavaPeerable.Disposed() |
オブジェクトの |
IJavaPeerable.DisposeUnlessReferenced() |
オブジェクトの |
IJavaPeerable.Finalized() |
オブジェクトの |
IJavaPeerable.JniManagedPeerState |
オブジェクトの |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
オブジェクトの |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
オブジェクトの |
IJavaPeerable.SetPeerReference(JniObjectReference) |
オブジェクトの |
拡張メソッド
JavaCast<TResult>(IJavaObject) |
Android ランタイムチェック型変換を実行します。 |
JavaCast<TResult>(IJavaObject) |
オブジェクトの |
GetJniTypeName(IJavaPeerable) |
オブジェクトの |