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
マルチプレクサー。
セレクターは、このクラスの メソッドを #open open
呼び出すことによって作成できます。これにより、システムの既定値 java.nio.channels.spi.SelectorProvider selector provider
を使用して新しいセレクターが作成されます。 セレクターは、カスタム セレクター プロバイダーの メソッドを java.nio.channels.spi.SelectorProvider#openSelector openSelector
呼び出すことによって作成することもできます。 セレクターは、メソッドを介して #close close
閉じられるまで開いたままです。
"ks">
セレクターに対する選択可能なチャネルの登録は、 オブジェクトによって SelectionKey
表されます。 セレクターは、次の 3 つの選択キーセットを保持します。
<ul>
<李>
キー セットには、このセレクターの現在のチャネル登録を表すキーが含まれています。 このセットは、 メソッドによって #keys() keys
返されます。
</李>
<李>
選択されたキー セットは、キーを追加したり、セット内のキーを更新したりする前の選択操作の間に、キーの対象セットで特定された操作の少なくとも 1 つに対して、各キーのチャネルが準備ができていることが検出されたキーのセットです。 このセットは、 メソッドによって #selectedKeys() selectedKeys
返されます。 選択されたキー セットは、常にキー セットのサブセットです。
</李>
<李>
cancelled-key set は、取り消されたが、チャネルがまだ登録解除されていないキーのセットです。 このセットには直接アクセスできません。 cancelled-key set は、常にキー セットのサブセットです。
</李>
</ul>
新しく作成されたセレクターでは、3 つのセットはすべて空です。
チャネルのメソッドを介してチャネルを登録する副作用として、セレクターのキー セットにキーが SelectableChannel#register(Selector,int) register
追加されます。 取り消されたキーは、選択操作中にキー セットから削除されます。 キー セット自体は直接変更できません。
キーは、チャネルを閉じるかメソッドを呼び出すかに関係なく、取り消されたときにセレクターの cancelled-key セットに SelectionKey#cancel cancel
追加されます。 キーを取り消すと、次の選択操作中にチャネルが登録解除され、その時点でセレクターのすべてのキー セットからキーが削除されます。
"sks">
キーは、選択操作によって選択キー セットに追加されます。 キーは、セット java.util.Set#remove(java.lang.Object) remove
の メソッドを呼び出すか、セットから取得した のメソッドを java.util.Iterator#remove() remove
呼び出すことによって、 java.util.Iterator iterator
選択したキー セットから直接削除できます。 set の メソッドを呼び出すことによって、選択したキー セットからすべてのキーを java.util.Set#clear() clear
削除できます。 選択したキー セットにキーを直接追加することはできません。
"selop"><h2>Selection</h2>
選択操作では、基になるオペレーティング システムに対して、登録されている各チャネルの準備状況に関する更新を照会して、キーの対象セットによって識別される操作のいずれかを実行します。 選択操作には次の 2 つの形式があります。
<Ol>
<李>
、#select(long)
、および #selectNow()
メソッドは#select()
、選択したキー セットに操作を実行する準備ができているチャネルのキーを追加するか、選択したキー セットに既に含まれているキーの準備完了のセットを更新します。
</李>
<李>
、#select(Consumer, long)
、および #selectNow(Consumer)
の各メソッドは#select(Consumer)
、操作を実行する準備ができている各チャネルのキーに対してアクションを実行します。 これらのメソッドは、選択したキー セットには追加されません。
</李>
</Ol>
<h3>選択キー セット</h3 に追加する選択操作>
選択操作のたびに、セレクターの選択キー セットにキーを追加したり、セレクターの選択キー セットからキーを削除したり、キー セットや取り消しキー セットから削除したりできます。 選択は、および #selectNow()
メソッドによって#select(long)
#select()
実行され、次の 3 つの手順が含まれます。
<Ol>
<李>
cancelled-key セット内の各キーは、メンバーである各キー セットから削除され、そのチャネルは登録解除されます。 この手順では、cancelled-key セットは空のままになります。
</李>
<李>
基になるオペレーティング システムは、選択操作が開始された時点でキーの関心セットによって識別される操作を実行するために、残りの各チャネルの準備状況に関する更新プログラムを照会します。 少なくとも 1 つの操作の準備ができているチャネルの場合は、次の 2 つのアクションのいずれかが実行されます。
<Ol>
<李>
チャネルのキーが選択されたキー セットにまだ存在しない場合は、そのセットに追加され、その準備完了操作セットが変更され、チャネルが準備完了と報告された操作を正確に識別します。 既に準備セットに記録されていた準備情報はすべて破棄されます。
</李>
<李>
それ以外の場合、チャネルのキーは既に選択されたキー セットに含まれているため、その準備完了操作セットが変更され、チャネルが準備完了と報告される新しい操作が識別されます。 既に準備セットに記録されていた準備情報はすべて保持されます。つまり、基になるシステムによって返される準備完了セットは、キーの現在の準備完了セットにビット単位で結合解除されます。
</李>
</Ol>
この手順の開始時にキー セット内のすべてのキーに空のインタレスト セットがある場合、選択したキー セットも、キーの準備完了操作セットも更新されません。
<李>
ステップ (2) の進行中に cancelled-key セットにキーが追加された場合は、手順 (1) のように処理されます。
</李>
</Ol>
選択操作が 1 つ以上のチャネルの準備が整うのを待つのをブロックするかどうか、またそれがどれだけの期間待つのかは、3 つの選択方法の唯一の重要な違いです。
<h3>選択したキー<に対してアクションを実行する選択操作/h3>
選択操作のたびに、セレクターのキー、選択キー、および取り消されたキー セットからキーを削除できます。 選択は、および #selectNow(Consumer)
メソッドによって#select(Consumer,long)
#select(Consumer)
実行され、次の 3 つの手順が含まれます。
<Ol>
<李>
cancelled-key セット内の各キーは、メンバーである各キー セットから削除され、そのチャネルは登録解除されます。 この手順では、cancelled-key セットは空のままになります。
</李>
<李>
基になるオペレーティング システムは、選択操作が開始された時点でキーの関心セットによって識別される操作を実行するために、残りの各チャネルの準備状況に関する更新プログラムを照会します。
このような操作の少なくとも 1 つの準備ができているチャネルの場合、チャネルのキーの準備完了操作セットが設定され、チャネルの準備ができている操作が正確に識別され、メソッドにselect
指定されたアクションが呼び出されてチャネルのキーが使用されます。 既に準備セットに記録されていた準備情報は、 アクションを呼び出す前に破棄されます。
または、チャネルが複数の操作の準備ができている場合は、チャネルのキーと準備完了操作セットがチャネルの準備ができている操作のサブセットに変更して、 アクション を複数回呼び出すことができます。 同じキーに対して アクション が複数回呼び出された場合、その ready-operation セットには、同じ選択操作でアクションの前回の呼び出し時にセットに含まれていた 操作 ビットが含まれることはありません。
</李>
<李>
ステップ (2) の進行中に cancelled-key セットにキーが追加された場合は、手順 (1) のように処理されます。
</李>
</Ol>
<h2>コンカレンシー</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
のメソッドを呼び出す以外の方法では、 java.util.ConcurrentModificationException
がスローされます。
1.4 で追加されました。
の java.nio.channels.Selector
Java ドキュメント。
このページの一部は、によって作成および共有された作業に基づく変更であり、に記載されている条件に従って使用されます。
コンストラクター
Selector() |
このクラスの新しいインスタンスを初期化します。 |
Selector(IntPtr, JniHandleOwnership) |
JNI オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。 |
プロパティ
Class |
この |
Handle |
基になる Android インスタンスへのハンドル。 (継承元 Object) |
IsOpen |
このセレクターが開いているかどうかを示します。 |
JniIdentityHashCode |
オブジェクトの |
JniPeerMembers |
オブジェクトの |
PeerReference |
オブジェクトの |
ThresholdClass |
この API は Mono for Android インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。 |
ThresholdType |
この API は Mono for Android インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。 |
メソッド
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) |
対応するチャネルが I/O 操作の準備ができているキーに対してアクションを選択して実行します。 |
Select(IConsumer, Int64) |
対応するチャネルが 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) |
現在のスレッドが起動するまで待機します。通常<は、通知></em> または <>em 中断</em>、または特定のリアルタイムが経過するまで待機します。 (継承元 Object) |
Wait(Int64, Int32) |
現在のスレッドが起動するまで待機します。通常<は、通知></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) |
オブジェクトの |