Selector Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Мультиплексор SelectableChannel объектов.
[Android.Runtime.Register("java/nio/channels/Selector", DoNotGenerateAcw=true)]
public abstract class Selector : Java.Lang.Object, IDisposable, 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 объектом. Селектор поддерживает три набора ключей выбора:
<Ул>
<li>
Набор ключей содержит ключи, представляющие текущие регистрации каналов этого селектора. Этот набор возвращается методом #keys() keys .
</li>
<li>
Выбранный набор ключей — это набор ключей, так что канал каждого ключа был обнаружен готовым по крайней мере к одной из операций, определенных в интересе ключа во время предыдущей операции выбора, которая добавляет ключи или обновления ключей в набор. Этот набор возвращается методом #selectedKeys() selectedKeys . Выбранный набор ключей всегда является подмножеством набора ключей.
</li>
<li>
Набор отмененных ключей — это набор ключей, которые были отменены, но каналы которых еще не зарегистрированы. Этот набор недоступен напрямую. Набор отмененных ключей всегда является подмножеством набора ключей.
</li>
</ul>
Все три набора пусты в созданном селекторе.
Ключ добавляется в набор ключей селектора в качестве побочных эффектов регистрации канала с помощью метода канала SelectableChannel#register(Selector,int) register . Отмененные ключи удаляются из набора ключей во время операций выбора. Сам набор ключей не является напрямую изменяемым.
Ключ добавляется в набор отмененных ключей селектора при отмене, закрыв канал или вызывая его SelectionKey#cancel cancel метод. Отмена ключа приведет к отмене регистрации канала во время следующей операции выбора, когда ключ будет удален из всех наборов ключей селектора.
"sks">
Ключи добавляются в выбранный набор ключей операциями выбора. Ключ может быть удален непосредственно из набора выбранных ключей путем вызова метода набора java.util.Set#remove(java.lang.Object) remove или вызова java.util.Iterator#remove() remove метода, полученного java.util.Iterator iterator из набора. Все ключи могут быть удалены из набора выбранных ключей путем вызова метода набора java.util.Set#clear() clear . Ключи могут не добавляться непосредственно в выбранный набор ключей.
"selop"><h2 Selection>/h2<>
Операция выбора запрашивает базовую операционную систему для обновления в отношении готовности каждого зарегистрированного канала выполнить любую из операций, определенных интересующим его ключом. Существует две формы операции выбора:
<ol>
<li>
#select()Методы #select(long)и #selectNow() методы добавляют ключи каналов, готовые к выполнению операции в набор выбранных ключей, или обновите готовый набор ключей, уже в выбранном наборе ключей.
</li>
<li>
Методы #select(Consumer)и #select(Consumer, long) методы выполняют #selectNow(Consumer) с ключом каждого канала, готового к выполнению операции. Эти методы не добавляются в набор выбранных ключей.
</li>
</Пр>
<Операции выбора h3>, которые добавляются в набор< выбранных ключей/h3>
Во время каждой операции выбора ключи могут быть добавлены и удалены из выбранного набора ключей селектора и могут быть удалены из его ключа и отмененных наборов ключей. Выбор выполняется методами #select()и #select(long)#selectNow() методами, а также включает три этапа:
<ol>
<li>
Каждый ключ в наборе отмененных ключей удаляется из каждого набора ключей, из которого он является членом, и его канал удаляется. Этот шаг оставляет отмененный набор ключей пустым.
</li>
<li>
Базовая операционная система запрашивает обновление по готовности каждого оставшегося канала выполнять любую из операций, определенных интересующим его ключом, как по состоянию на момент начала операции выбора. Для канала, готового по крайней мере к одной такой операции, выполняется одно из следующих двух действий:
<ol>
<li>
Если ключ канала еще не находится в выбранном наборе ключей, он добавляется в этот набор, а его набор готовых операций изменяется, чтобы определить именно те операции, для которых канал теперь будет готов. Все сведения о готовности, записанные ранее в готовом наборе, удаляются.
</li>
<li>
В противном случае ключ канала уже находится в выбранном наборе ключей, поэтому его набор готовых операций изменяется, чтобы определить все новые операции, для которых канал будет готов. Все сведения о готовности, записанные ранее в готовом наборе, сохраняются; Другими словами, готовый набор, возвращаемый базовой системой, побитово разъединен в текущий готовый набор ключа.
</li>
</Пр>
Если все ключи в наборе ключей в начале этого шага имеют пустые наборы интересов, то ни выбранный набор ключей, ни любые наборы готовых операций ключей не будут обновлены.
<li>
Если все ключи были добавлены в набор отмененных ключей во время выполнения шага (2), они обрабатываются как на шаге (1).
</li>
</Пр>
Независимо от того, будут ли блоки операций выбора ожидать готовности одного или нескольких каналов, и если да в течение длительного времени, это единственное важное различие между тремя методами выбора.
<Операции выбора h3>, выполняющие действие с выбранными ключами</h3>
Во время каждой операции выбора ключи могут быть удалены из ключа селектора, выбранного ключа и отмененных наборов ключей. Выбор выполняется методами #select(Consumer)и #select(Consumer,long)#selectNow(Consumer) методами, а также включает три этапа:
<ol>
<li>
Каждый ключ в наборе отмененных ключей удаляется из каждого набора ключей, из которого он является членом, и его канал удаляется. Этот шаг оставляет отмененный набор ключей пустым.
</li>
<li>
Базовая операционная система запрашивает обновление по готовности каждого оставшегося канала выполнять любую из операций, определенных интересующим его ключом, как по состоянию на момент начала операции выбора.
Для канала, готового по крайней мере к одной такой операции, набор готовых операций ключа канала определяет именно те операции, для которых канал готов, и действие , указанное select методу, вызывается для использования ключа канала. Все сведения о готовности, записанные ранее в готовом наборе, удаляются до вызова действия.
Кроме того, если канал готов к нескольким операциям, действие может вызываться несколько раз с ключом канала и набором готовых операций, измененных в подмножество операций, для которых канал готов. Если действие вызывается несколько раз для того же ключа, то его набор готовых операций никогда не содержит биты операций, содержащиеся в наборе при предыдущих вызовах действия в той же операции выбора.
</li>
<li>
Если все ключи были добавлены в набор отмененных ключей во время выполнения шага (2), они обрабатываются как на шаге (1).
</li>
</Пр>
<h2>Concurrency</h2>
Селектор и его набор ключей безопасны для использования несколькими параллельными потоками. Его выбранный набор ключей и отмененный набор ключей, однако, не являются.
Операции выбора синхронизируются с селектором в выбранном наборе ключей в этом порядке. Они также синхронизируются с набором отмененных ключей во время шагов (1) и (3) выше.
Изменения, внесенные в интересующие наборы ключей селектора во время выполнения операции выбора, не влияют на операцию. Они будут замечены следующей операцией выбора.
Ключи могут быть отменены, и каналы могут быть закрыты в любое время. Поэтому наличие ключа в одном или нескольких наборах ключей селектора не означает, что ключ действителен или открыт его канал. Код приложения должен быть осторожным для синхронизации и проверки этих условий, если существует любая вероятность того, что другой поток отменит ключ или закройте канал.
Поток, заблокированный в операции выбора, может быть прерван другим потоком одним из трех способов:
<Ул>
<li>
Вызывая метод селектора #wakeup wakeup ,
</li>
<li>
Вызов метода селектора #close close или
</li>
<li>
Вызывая метод заблокированного java.lang.Thread#interrupt() interrupt потока, в этом случае его состояние прерывания будет задано, а метод селектора #wakeup wakeup будет вызван.
</li>
</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 документации по java.nio.channels.Selector.
Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".
Конструкторы
| Имя. | Описание |
|---|---|
| Selector() |
Инициализирует новый экземпляр этого класса. |
| Selector(IntPtr, JniHandleOwnership) |
Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения. |
Свойства
| Имя. | Описание |
|---|---|
| Class |
Возвращает класс среды выполнения этого |
| Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
| IsOpen |
Указывает, открыт ли этот селектор. |
| JniIdentityHashCode |
Возвращает хэш-код удостоверения, назначенный этому Java одноранговой среде выполнения взаимодействия. (Унаследовано от Object) |
| JniManagedPeerState |
Мультиплексор |
| JniPeerMembers |
Мультиплексор |
| PeerReference |
Возвращает ссылку на объект JNI для этого Java однорангового узла. (Унаследовано от Object) |
| ThresholdClass |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
| ThresholdType |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
Методы
| Имя. | Описание |
|---|---|
| Clone() |
Создает и возвращает копию этого объекта. (Унаследовано от Object) |
| Close() |
Закрывает этот селектор. |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Мультиплексор |
| Dispose() |
Освобождает ресурсы, удерживаемые этим Java одноранговым узлом. (Унаследовано от Object) |
| Dispose(Boolean) |
Освобождает ресурсы, удерживаемые этим Java одноранговым узлом. (Унаследовано от Object) |
| DisposeUnlessReferenced() |
Мультиплексор |
| Equals(Object) |
Мультиплексор |
| Equals(Object) |
Указывает, равен ли другой объект этому объекту. (Унаследовано от Object) |
| GetHashCode() |
Возвращает хэш-значение кода для объекта. (Унаследовано от Object) |
| JavaFinalize() |
Устаревшие.
Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет. (Унаследовано от Object) |
| Keys() |
Возвращает набор ключей этого селектора. |
| Notify() |
Просыпается один поток, ожидающий монитора этого объекта. (Унаследовано от Object) |
| NotifyAll() |
Просыпает все потоки, ожидающие монитора этого объекта. (Унаследовано от Object) |
| Open() |
Открывает селектор. |
| Provider() |
Возвращает поставщика, создавшего этот канал. |
| Select() |
Выбирает набор ключей, соответствующие каналы которых готовы к операциям ввода-вывода. |
| Select(IConsumer, Int64) |
Выбирает и выполняет действие на ключах, соответствующие каналы которых готовы к операциям ввода-вывода. |
| Select(IConsumer) |
Выбирает и выполняет действие на ключах, соответствующие каналы которых готовы к операциям ввода-вывода. |
| Select(Int64) |
Выбирает набор ключей, соответствующие каналы которых готовы к операциям ввода-вывода. |
| SelectedKeys() |
Возвращает выбранный набор ключей этого селектора. |
| SelectNow() |
Выбирает набор ключей, соответствующие каналы которых готовы к операциям ввода-вывода. |
| SelectNow(IConsumer) |
Выбирает и выполняет действие на ключах, соответствующие каналы которых готовы к операциям ввода-вывода. |
| SetHandle(IntPtr, JniHandleOwnership) |
Задает свойство Handle. (Унаследовано от Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Мультиплексор |
| ToArray<T>() |
Создает управляемый массив из этого Java оболочки массива. (Унаследовано от Object) |
| ToString() |
Возвращает строковое представление объекта. (Унаследовано от Object) |
| UnregisterFromRuntime() |
Отменяет регистрацию этого Java однорангового узла из среды выполнения взаимодействия. (Унаследовано от Object) |
| Wait() |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, путем <><уведомления/>em или <эм>прерванного</em.> (Унаследовано от Object) |
| Wait(Int64, Int32) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
| Wait(Int64) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
| Wakeup() |
Вызывает первую операцию выбора, которая еще не вернулась к возврату немедленно. |
Явные реализации интерфейса
| Имя. | Описание |
|---|---|
| IJavaPeerable.Disposed() |
Мультиплексор |
| IJavaPeerable.Finalized() |
Мультиплексор |
| IJavaPeerable.JniObjectReferenceControlBlock |
Мультиплексор |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Мультиплексор |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Мультиплексор |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Мультиплексор |
| IJavaPeerable.UnregisterFromRuntime() |
Мультиплексор |
Методы расширения
| Имя. | Описание |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Возвращает имя JNI типа экземпляра |
| JavaAs<TResult>(IJavaPeerable) |
Попробуйте принуждать к типу |
| JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверяемого средой выполнения Android. |
| JavaCast<TResult>(IJavaObject) |
Мультиплексор |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Попробуйте принуждать к типу |