다음을 통해 공유


Selector 클래스

정의

개체의 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
상속
Selector
파생
특성
구현

설명

개체의 SelectableChannel 멀티플렉서입니다.

이 클래스의 메서드를 호출하여 #open open 선택기를 만들 수 있습니다. 이 메서드는 시스템의 기본값 java.nio.channels.spi.SelectorProvider selector provider 을 사용하여 새 선택기를 만듭니다. 사용자 지정 선택기 공급자의 메서드를 java.nio.channels.spi.SelectorProvider#openSelector openSelector 호출하여 선택기를 만들 수도 있습니다. 선택기는 해당 메서드를 통해 #close close 닫을 때까지 열린 상태로 유지됩니다.

"ks">

선택기를 사용하여 선택한 채널의 등록은 개체로 SelectionKey 표시됩니다. 선택기는 세 가지 선택 키 집합을 유지 관리합니다.

<ul>

<리>

키 집합에는 이 선택기의 현재 채널 등록을 나타내는 키가 포함됩니다. 이 집합은 메서드에서 반환됩니다 #keys() keys .

</리>

<리>

선택한 키 집합각 키의 채널이 집합에 키를 추가하거나 키를 업데이트하는 이전 선택 작업 중에 키의 관심 집합에서 식별된 작업 중 하나 이상에 대해 준비되도록 검색된 키 집합입니다. 이 집합은 메서드에서 반환됩니다 #selectedKeys() selectedKeys . 선택한 키 집합은 항상 키 집합의 하위 집합입니다.

</리>

<리>

취소된 키 집합은 취소되었지만 채널이 아직 등록 취소되지 않은 키 집합입니다. 이 집합은 직접 액세스할 수 없습니다. 취소된 키 집합은 항상 키 집합의 하위 집합입니다.

</리>

</ul>

세 집합은 모두 새로 만든 선택기에서 비어 있습니다.

채널의 메서드를 통해 채널을 등록하는 부작용으로 선택기의 키 집합에 SelectableChannel#register(Selector,int) register 키가 추가됩니다. 선택 작업 중에 취소된 키가 키 집합에서 제거됩니다. 키 집합 자체는 직접 수정할 수 없습니다.

채널 닫거나 메서드를 호출 SelectionKey#cancel cancel 하여 취소될 때 선택기에서 취소된 키 집합에 키가 추가됩니다. 키를 취소하면 다음 선택 작업 중에 해당 채널의 등록이 취소되며, 이때 모든 선택기의 키 집합에서 키가 제거됩니다.

"sks">

선택 작업에 의해 선택한 키 집합에 키가 추가됩니다. 집합의 java.util.Set#remove(java.lang.Object) remove 메서드를 호출하거나 집합에서 가져온 메서드 java.util.Iterator iterator 를 호출하여 java.util.Iterator#remove() remove 선택한 키 집합에서 직접 키를 제거할 수 있습니다. 집합의 java.util.Set#clear() clear 메서드를 호출하여 선택한 키 집합에서 모든 키를 제거할 수 있습니다. 선택한 키 집합에 키를 직접 추가할 수 없습니다.

"selop"><h2>Selection</h2>

선택 작업은 키의 관심 집합으로 식별된 작업을 수행하기 위해 등록된 각 채널의 준비 상태와 관련된 업데이트를 기본 운영 체제에 쿼리합니다. 선택 연산에는 다음 두 가지 형식이 있습니다.

<ol>

<리>

#select(long)#selectNow() 메서드는 #select()선택한 키 집합에 작업을 수행할 준비가 된 채널의 키를 추가하거나 선택한 키 집합에 이미 있는 키의 준비 작업 집합을 업데이트합니다.

</리>

<리>

#select(Consumer, long)#selectNow(Consumer) 메서드는 #select(Consumer)작업을 수행할 준비가 된 각 채널의 키에 대해 작업을 수행합니다. 이러한 메서드는 선택한 키 집합에 추가되지 않습니다.

</리>

</ol>

<선택한 키 집합</h3에 추가하는 h3>선택 작업>

각 선택 작업 중에 선택기에서 선택한 키 집합에 키를 추가하고 제거할 수 있으며 키 및 취소된 키 집합에서 제거될 수 있습니다. 선택 영역은 , #select(long)#selectNow() 메서드에 #select()의해 수행되며 다음 세 단계를 포함합니다.

<ol>

<리>

취소된 키 집합의 각 키는 멤버인 각 키 집합에서 제거되고 해당 채널은 등록 취소됩니다. 이 단계에서는 취소된 키 집합을 비워 둡니다.

</리>

<리>

기본 운영 체제는 선택 작업이 시작된 시점부터 키의 관심 집합으로 식별되는 작업을 수행하기 위해 나머지 각 채널의 준비 상태와 관련된 업데이트를 쿼리합니다. 이러한 작업을 하나 이상 수행할 준비가 된 채널의 경우 다음 두 작업 중 하나가 수행됩니다.

<ol>

<리>

채널의 키가 선택된 키 집합에 아직 없는 경우 해당 집합에 추가되고 해당 준비 작업 집합이 수정되어 채널이 준비되었다고 보고되는 작업을 정확하게 식별합니다. 준비 집합에 이전에 기록된 모든 준비 정보는 삭제됩니다.

</리>

<리>

그렇지 않으면 채널의 키가 선택된 키 집합에 이미 있으므로 해당 준비 작업 집합은 채널이 준비되었다고 보고되는 새 작업을 식별하도록 수정됩니다. 준비 집합에 이전에 기록된 모든 준비 정보는 유지됩니다. 즉, 기본 시스템에서 반환된 준비 집합은 키의 현재 준비 집합에 비트 조인되지 않습니다.

</리>

</ol>

이 단계의 시작 부분에 있는 키 집합의 모든 키에 빈 관심 집합이 있는 경우 선택한 키 집합이나 키의 준비 작업 집합이 업데이트되지 않습니다.

<리>

단계(2)가 진행 중인 동안 취소된 키 집합에 키가 추가된 경우 단계(1)와 같이 처리됩니다.

</리>

</ol>

선택 작업 블록이 하나 이상의 채널이 준비될 때까지 대기할지 여부와 가능한 경우 세 가지 선택 방법 간의 유일한 필수 차이점입니다.

<선택한 키</h3>에 대한 작업을 수행하는 h3 선택 작업>

각 선택 작업 중에 선택기 키, 선택한 키 및 취소된 키 집합에서 키가 제거될 수 있습니다. 선택 영역은 , #select(Consumer,long)#selectNow(Consumer) 메서드에 #select(Consumer)의해 수행되며 다음 세 단계를 포함합니다.

<ol>

<리>

취소된 키 집합의 각 키는 멤버인 각 키 집합에서 제거되고 해당 채널은 등록 취소됩니다. 이 단계에서는 취소된 키 집합을 비워 둡니다.

</리>

<리>

기본 운영 체제는 선택 작업이 시작된 시점부터 키의 관심 집합으로 식별되는 작업을 수행하기 위해 나머지 각 채널의 준비 상태와 관련된 업데이트를 쿼리합니다.

이러한 작업을 하나 이상 수행할 준비가 된 채널의 경우 채널 키의 준비 작업 집합은 채널이 준비 되고 메서드에 지정된 작업이 채널의 키를 사용하도록 호출되는 작업을 정확하게 식별하도록 select 설정됩니다. 이전에 준비 집합에 기록된 준비 정보는 작업을 호출하기 전에 삭제됩니다.

또는 채널이 둘 이상의 작업에 대해 준비된 경우 채널의 키 및 준비 작업 집합이 채널이 준비된 작업의 하위 집합으로 수정된 작업을 두 번 이상 호출할 수 있습니다. 동일한 키에 대해 작업이 두 번 이상 호출되는 경우 해당 준비 작업 집합에는 동일한 선택 작업의 작업에 대한 이전 호출 에서 집합에 포함된 작업 비트가 포함되지 않습니다.

</리>

<리>

단계(2)가 진행 중인 동안 취소된 키 집합에 키가 추가된 경우 단계(1)와 같이 처리됩니다.

</리>

</ol>

<h2>동시성</h2>

선택기와 해당 키 집합은 여러 동시 스레드에서 사용하기에 안전합니다. 그러나 선택한 키 집합 및 취소된 키 집합은 그렇지 않습니다.

선택 작업은 선택한 키 집합의 선택기 자체에서 해당 순서대로 동기화됩니다. 또한 위의 단계(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 를 호출하는 것을 제외하고는 어떤 방식으로든 throw됩니다.

1.4에 추가되었습니다.

에 대한 java.nio.channels.SelectorJava 설명서

이 페이지의 일부는 Android 오픈 소스 프로젝트에서 만들고 공유하고 Creative Commons 2.5 특성 라이선스에 설명된 용어에 따라 사용되는 작업을 기반으로 하는 수정 사항입니다.

생성자

Selector()

이 클래스의 새 인스턴스를 초기화합니다.

Selector(IntPtr, JniHandleOwnership)

JNI 개체의 관리되는 표현을 만들 때 사용되는 생성자입니다. 런타임에서 호출합니다.

속성

Class

Object런타임 클래스를 반환합니다.

(다음에서 상속됨 Object)
Handle

기본 Android 인스턴스에 대한 핸들입니다.

(다음에서 상속됨 Object)
IsOpen

이 선택기가 열려 있는지 여부를 나타냅니다.

JniIdentityHashCode

개체의 SelectableChannel 멀티플렉서입니다.

(다음에서 상속됨 Object)
JniPeerMembers

개체의 SelectableChannel 멀티플렉서입니다.

PeerReference

개체의 SelectableChannel 멀티플렉서입니다.

(다음에서 상속됨 Object)
ThresholdClass

이 API는 Android용 Mono 인프라를 지원하며 코드에서 직접 사용할 수 없습니다.

ThresholdType

이 API는 Android용 Mono 인프라를 지원하며 코드에서 직접 사용할 수 없습니다.

메서드

Clone()

이 개체의 복사본을 만들고 반환합니다.

(다음에서 상속됨 Object)
Close()

이 선택기를 닫습니다.

Dispose()

개체의 SelectableChannel 멀티플렉서입니다.

(다음에서 상속됨 Object)
Dispose(Boolean)

개체의 SelectableChannel 멀티플렉서입니다.

(다음에서 상속됨 Object)
Equals(Object)

다른 개체가 이 개체와 "같음"인지 여부를 나타냅니다.

(다음에서 상속됨 Object)
GetHashCode()

개체에 대한 해시 코드 값을 반환합니다.

(다음에서 상속됨 Object)
JavaFinalize()

가비지 수집에서 개체에 대한 참조가 더 이상 없다고 판단할 때 개체의 가비지 수집기에서 호출됩니다.

(다음에서 상속됨 Object)
Keys()

이 선택기 키 집합을 반환합니다.

Notify()

이 개체의 모니터에서 대기 중인 단일 스레드를 해제합니다.

(다음에서 상속됨 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>()

개체의 SelectableChannel 멀티플렉서입니다.

(다음에서 상속됨 Object)
ToString()

개체의 문자열 표현을 반환합니다.

(다음에서 상속됨 Object)
UnregisterFromRuntime()

개체의 SelectableChannel 멀티플렉서입니다.

(다음에서 상속됨 Object)
Wait()

현재 스레드가 각성될 때까지 대기하게 하며, 일반적으로 <알림을 받<>거나 <><중단/종료>합니다.>

(다음에서 상속됨 Object)
Wait(Int64, Int32)

현재 스레드가 각성될 때까지 대기하게 하며, 일반적으로 <>알림을 받<거나 <중단/>종료><>하거나 일정량의 실시간 경과가 발생할 때까지 대기합니다.

(다음에서 상속됨 Object)
Wait(Int64)

현재 스레드가 각성될 때까지 대기하게 하며, 일반적으로 <>알림을 받<거나 <중단/>종료><>하거나 일정량의 실시간 경과가 발생할 때까지 대기합니다.

(다음에서 상속됨 Object)
Wakeup()

아직 반환되지 않은 첫 번째 선택 작업이 즉시 반환되도록 합니다.

명시적 인터페이스 구현

IJavaPeerable.Disposed()

개체의 SelectableChannel 멀티플렉서입니다.

(다음에서 상속됨 Object)
IJavaPeerable.DisposeUnlessReferenced()

개체의 SelectableChannel 멀티플렉서입니다.

(다음에서 상속됨 Object)
IJavaPeerable.Finalized()

개체의 SelectableChannel 멀티플렉서입니다.

(다음에서 상속됨 Object)
IJavaPeerable.JniManagedPeerState

개체의 SelectableChannel 멀티플렉서입니다.

(다음에서 상속됨 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

개체의 SelectableChannel 멀티플렉서입니다.

(다음에서 상속됨 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

개체의 SelectableChannel 멀티플렉서입니다.

(다음에서 상속됨 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

개체의 SelectableChannel 멀티플렉서입니다.

(다음에서 상속됨 Object)

확장 메서드

JavaCast<TResult>(IJavaObject)

Android 런타임 확인 형식 변환을 수행합니다.

JavaCast<TResult>(IJavaObject)

개체의 SelectableChannel 멀티플렉서입니다.

GetJniTypeName(IJavaPeerable)

개체의 SelectableChannel 멀티플렉서입니다.

적용 대상