Spec-Zone .ru
спецификации, руководства, описания, API
|
public abstract class Selector extends Object implements Closeable
SelectableChannel
объекты. Селектор может быть создан, вызывая Регистрация выбираемого канала с селектором представляется a Набор ключей содержит ключи, представляющие текущую регистрацию канала этого селектора. Этот набор возвращается Выбранный набор ключей является набором ключей так, что, канал каждого ключа был обнаружен, чтобы быть готов к по крайней мере одной из операций, идентифицированных в наборе интереса ключа во время предшествующей работы выбора. Этот набор возвращается Отмененный набор ключей является набором ключей, которые были отменены, но чьи каналы еще не были вычеркнуты из списка. Этот набор не непосредственно доступен. Отмененный набор ключей всегда является подмножеством набора ключей. Все три набора пусты в недавно создаваемом селекторе. Ключ добавляется к набору ключей селектора как побочный эффект регистрации канала через канал Ключ добавляется к отмененному набору ключей его селектора, когда он отменяется, ли, закрывая его канал или вызывая Ключи добавляются к выбранному набору ключей операциями выбора. Ключ может быть удален непосредственно из выбранного набора ключей, вызывая набор Во время каждой работы выбора ключи могут быть добавлены к и удалены из выбранного набора ключей селектора и могут быть удалены из его наборов ключей и отмененных наборов ключей. Выбор выполняется Каждый ключ в отмененном наборе ключей удаляется из каждого набора ключей, которого это - элемент, и его канал вычеркивается из списка. Этот шаг листы пустой отмененный набор ключей. Базовая операционная система запрашивается для обновления относительно готовности каждого остающегося канала выполнить любую из операций, идентифицированных набором интереса ее ключа с момента, который начала работа выбора. Для канала, который готов по крайней мере к одной такой работе, выполняется одно из следующих двух действий: Если ключ канала уже не находится в выбранном наборе ключей тогда, это добавляется к тому набору, и его набор готовой работы изменяется, чтобы идентифицировать точно те операции, к которым канал, как теперь сообщают, готов. Любая информация о готовности, ранее записанная в готовом наборе, отбрасывается. Иначе ключ канала уже находится в выбранном наборе ключей, таким образом, его набор готовой работы изменяется, чтобы идентифицировать любые новые операции, к которым канал, как сообщают, готов. Любая информация о готовности, ранее записанная в готовом наборе, сохраняется; другими словами готовый набор, возвращенный базовой системой, порязрядно разобщается в текущий готовый набор ключа. Если какие-либо ключи были добавлены к отмененному набору ключей, в то время как шаг (2) происходил тогда, они обрабатываются как в шаге (1). Является ли работа выбора блоки, чтобы ожидать одного или более каналов, чтобы стать готовый, и раз так как долго, единственным существенным различием между тремя методами выбора. Селекторы самостоятельно безопасны для использования многократными параллельными потоками; их наборы ключей, однако, не. Операции выбора синхронизируются на селекторе непосредственно, на наборе ключей, и на выбранном наборе ключей, в том порядке. Они также синхронизируются на отмененном наборе ключей во время шагов (1) и (3) выше. Изменения, произведенные в наборах интереса ключей селектора, в то время как работа выбора происходит, не имеют никакого эффекта на ту работу; они будут замечены следующей работой выбора. Ключи могут быть отменены, и каналы могут быть закрыты в любое время. Следовательно присутствие ключа один или больше наборов ключей селектора не подразумевает, что ключ допустим или что его канал открыт. Код программы должен делать все возможное синхронизировать и проверить эти условия по мере необходимости, если есть возможность, что другой поток отменит ключ или закроет канал. Поток, блокированный в одном из Вызывая селектор Вызывая селектор Вызывая блокированный поток Наборы ключей селектора и выбранные наборы ключей не, вообще, безопасны для использования многократными параллельными потоками. Если такой поток мог бы изменить один из этих наборов непосредственно тогда, доступом нужно управлять, синхронизируясь на наборе непосредственно. iterators возвратился этими наборами open
метод этого класса, который будет использовать значение по умолчанию системы селекторный провайдер
создать новый селектор. Селектор может также быть создан, вызывая
openSelector
метод пользовательского селекторного провайдера. Селектор остается открытым, пока он не закрывается через close
метод.
SelectionKey
объект. Селектор поддерживает три набора ключей выбора:
keys
метод. selectedKeys
метод. Выбранный набор ключей всегда является подмножеством набора ключей. register
метод. Отмененные ключи удаляются из набора ключей во время операций выбора. Сам набор ключей не является непосредственно поддающимся изменению. cancel
метод. Отмена ключа заставит свой канал быть вычеркнутым из списка во время следующей работы выбора, в котором времени ключ будет удаленный изо всех наборов ключей селектора. remove
метод или вызывая remove
метод iterator
полученный из набора. Ключи никогда не удаляются из выбранного набора ключей никаким другим способом; они, в частности не удаляются как побочный эффект операций выбора. Ключи не могут быть добавлены непосредственно к выбранному набору ключей.
Выбор
select()
, select(long)
, и selectNow()
методы, и включают три шага:
Параллелизм
select()
или select(long)
методы могут быть прерваны некоторым другим потоком одним из трех способов:
wakeup
метод, close
метод, или interrupt
метод, когда его состояние прерывания будет установлено и селектор wakeup
метод будет вызван. close
метод синхронизируется на селекторе и всех трех наборах ключей в том же самом порядке как в работе выбора.
iterator
методы являются сбоем быстро: Если набор изменяется после того, как iterator создается, всегда кроме, вызывая собственный iterator's remove
метод, тогда a ConcurrentModificationException
будет брошен.
SelectableChannel
, SelectionKey
Модификатор | Конструктор и Описание |
---|---|
protected |
Selector()
Инициализирует новый экземпляр этого класса.
|
Модификатор и Тип | Метод и Описание |
---|---|
abstract void |
close()
Завершения этот селектор.
|
abstract boolean |
isOpen()
Говорит, открыт ли этот селектор.
|
abstract Set<SelectionKey> |
keys()
Возвраты набор ключей этого селектора.
|
static Selector |
open()
Открывает селектор.
|
abstract SelectorProvider |
provider()
Возвращает провайдера, который создал этот канал.
|
abstract int |
select()
Выбирает ряд ключей, соответствующие каналы которых готовы к операциям ввода-вывода.
|
abstract int |
select(long timeout)
Выбирает ряд ключей, соответствующие каналы которых готовы к операциям ввода-вывода.
|
abstract Set<SelectionKey> |
selectedKeys()
Возвраты выбранный набор ключей этого селектора.
|
abstract int |
selectNow()
Выбирает ряд ключей, соответствующие каналы которых готовы к операциям ввода-вывода.
|
abstract Selector |
wakeup()
Вызывает первую работу выбора, которая еще не возвратилась, чтобы сразу возвратиться.
|
public static Selector open() throws IOException
Новый селектор создается, вызывая openSelector
метод значения по умолчанию в масштабе всей системы SelectorProvider
объект.
IOException
- Если ошибка ввода-вывода происходитpublic abstract boolean isOpen()
public abstract SelectorProvider provider()
public abstract Set<SelectionKey> keys()
Набор ключей не является непосредственно поддающимся изменению. Ключ удаляется только после того, как он был отменен, и его канал был вычеркнут из списка. Любая попытка изменить набор ключей вызовет UnsupportedOperationException
быть брошенным.
Набор ключей не ориентирован на многопотоковое исполнение.
ClosedSelectorException
- Если этот селектор закрываетсяpublic abstract Set<SelectionKey> selectedKeys()
Ключи могут быть удалены из, но не непосредственно добавлены к, выбранный набор ключей. Любая попытка добавить объект к набору ключей вызовет UnsupportedOperationException
быть брошенным.
Выбранный набор ключей не ориентирован на многопотоковое исполнение.
ClosedSelectorException
- Если этот селектор закрываетсяpublic abstract int selectNow() throws IOException
Этот метод выполняет работу выбора неблокирования. Если никакие каналы не стали выбираемыми начиная с предыдущей работы выбора тогда, этот метод сразу возвращает нуль.
Вызов этого метода очищает эффект любых предыдущих вызовов wakeup
метод.
IOException
- Если ошибка ввода-вывода происходитClosedSelectorException
- Если этот селектор закрываетсяpublic abstract int select(long timeout) throws IOException
Этот метод выполняет работу выбора блокирования. Это возвращается только после того, как по крайней мере один канал выбирается, этот селектор wakeup
метод вызывается, текущий поток прерывается, или данный период тайм-аута истекает, какой бы ни на первом месте.
Этот метод не предлагает гарантий в реальном времени: Это планирует тайм-аут как будто, вызывая Object.wait(long)
метод.
timeout
- Если положительный, блок для до миллисекунд timeout, более или менее, ожидая канала, чтобы стать готовый; если нуль, блок неопределенно; не должно быть отрицательнымIOException
- Если ошибка ввода-вывода происходитClosedSelectorException
- Если этот селектор закрываетсяIllegalArgumentException
- Если значение параметра тайм-аута отрицательноpublic abstract int select() throws IOException
Этот метод выполняет работу выбора блокирования. Это возвращается только после того, как по крайней мере один канал выбирается, этот селектор wakeup
метод вызывается, или текущий поток прерывается, какой бы ни на первом месте.
IOException
- Если ошибка ввода-вывода происходитClosedSelectorException
- Если этот селектор закрываетсяpublic abstract Selector wakeup()
Если другой поток в настоящий момент блокируется в вызове select()
или select(long)
методы тогда, что вызов сразу возвратится. Если никакая работа выбора не в настоящий момент произойдет тогда, то следующий вызов одного из этих методов сразу не возвратится если selectNow()
тем временем вызывается метод. В любом случае значение, возвращенное тем вызовом, может быть ненулевым. Последующие вызовы select()
или select(long)
методы блокируют как обычно, если этот метод не будет вызван снова тем временем.
Вызов этого метода не раз между двумя последовательными операциями выбора имеет тот же самый эффект как вызов этого только однажды.
public abstract void close() throws IOException
Если поток в настоящий момент блокируется в одном из методов выбора этого селектора тогда, это прерывается как будто, вызывая селектор wakeup
метод.
Любые неотмененные ключи, все еще связанные с этим селектором, лишаются законной силы, их каналы вычеркиваются из списка, и любые другие средства, связанные с этим селектором, высвобождаются.
Если этот селектор уже закрывается, затем вызывая этот метод, не имеет никакого эффекта.
После того, как селектор закрывается, дальше попытайтесь использовать его, кроме, вызывая этот метод или wakeup
метод, вызовет a ClosedSelectorException
быть брошенным.
close
в интерфейсе Closeable
close
в интерфейсе AutoCloseable
IOException
- Если ошибка ввода-вывода происходит
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.