Spec-Zone .ru
спецификации, руководства, описания, API
|
public abstract class SelectableChannel extends AbstractInterruptibleChannel implements Channel
Selector
. Чтобы использоваться с селектором, экземпляр этого класса должен сначала быть зарегистрирован через register
метод. Этот метод возвращает новое SelectionKey
объект, который представляет регистрацию канала с селектором.
После того, как зарегистрированный в селекторе, канал остается зарегистрированным, пока он не вычеркивается из списка. Это включает освобождение независимо от того, что ресурсы были выделены каналу селектором.
Канал не может быть вычеркнут из списка непосредственно; вместо этого, ключ, представляющий его регистрацию, должен быть отменен. Отмена ключа запрашивает, чтобы канал был вычеркнут из списка во время следующей работы выбора селектора. Ключ может быть отменен явно, вызывая cancel
метод. Все ключи канала отменяются неявно, когда канал закрывается, ли, вызывая close
метод или прерывая поток блокируется в работе ввода-вывода на канал.
Если сам селектор будет закрыт тогда, то канал будет вычеркнут из списка, и ключ, представляющий его регистрацию, будет лишен законной силы без дополнительной задержки.
Канал может быть зарегистрирован самое большее однажды с любым определенным селектором.
Регистрируется ли канал в одном или более селекторах, может быть определен, вызывая isRegistered
метод.
Выбираемые каналы безопасны для использования многократными параллельными потоками.
isBlocking
метод. Недавно создаваемые выбираемые каналы всегда находятся в блокировании режима. Неблокирование режима является самым полезным в соединении с основанным на селекторе мультиплексированием. Канал должен быть помещен в неблокирование режима прежде, чем быть зарегистрированным в селекторе, и не может быть возвращен к блокированию режима, пока это не было вычеркнуто из списка.
SelectionKey
, Selector
Модификатор | Конструктор и Описание |
---|---|
protected |
SelectableChannel()
Инициализирует новый экземпляр этого класса.
|
Модификатор и Тип | Метод и Описание |
---|---|
abstract Object |
blockingLock()
Получает объект на который
configureBlocking и register методы синхронизируются. |
abstract SelectableChannel |
configureBlocking(boolean block)
Корректирует режим блокирования этого канала.
|
abstract boolean |
isBlocking()
Говорит, блокирует ли каждая работа ввода-вывода на этом канале, пока это не завершится.
|
abstract boolean |
isRegistered()
Говорит, регистрируется ли этот канал в настоящий момент в каких-либо селекторах.
|
abstract SelectionKey |
keyFor(Selector sel)
Получает ключ, представляющий регистрацию канала с данным селектором.
|
abstract SelectorProvider |
provider()
Возвращает провайдера, который создал этот канал.
|
SelectionKey |
register(Selector sel, int ops)
Регистры этот канал с данным селектором, возвращая ключ выбора.
|
abstract SelectionKey |
register(Selector sel, int ops, Object att)
Регистры этот канал с данным селектором, возвращая ключ выбора.
|
abstract int |
validOps()
Возвращает набор работы, идентифицирующий поддерживаемые операции этого канала.
|
begin, close, end, implCloseChannel, isOpen
protected SelectableChannel()
public abstract SelectorProvider provider()
public abstract int validOps()
public abstract boolean isRegistered()
Из-за свойственной задержки между ключевой отменой и каналом deregistration, канал может остаться зарегистрированным в течение некоторого времени после того, как все его ключи были отменены. Канал может также остаться зарегистрированным в течение некоторого времени после того, как он закрывается.
public abstract SelectionKey keyFor(Selector sel)
public abstract SelectionKey register(Selector sel, int ops, Object att) throws ClosedChannelException
Если этот канал в настоящий момент регистрируется в данном селекторе тогда ключевое представление выбора, что регистрация возвращается. Набор интереса ключа будет изменен на ops, как будто, вызывая interestOps(int)
метод. Если параметром att не является null тогда, присоединение ключа будет установлено в то значение. A CancelledKeyException
будет брошен, если ключ был уже отменен.
Иначе этот канал еще не был зарегистрирован в данном селекторе, таким образом, это регистрируется, и получающийся новый ключ возвращается. Начальным набором интереса ключа будет ops, и его присоединением будет att.
В любое время может быть вызван этот метод. Если этот метод вызывается в то время как другой вызов этого метода или configureBlocking
метод происходит тогда, он сначала блокирует, пока другая работа не полна. Этот метод будет тогда синхронизироваться на наборе ключей селектора и поэтому может блокировать если вызвано одновременно с другой работой регистрации или выбора, включающей тот же самый селектор.
Если этот канал закрывается, в то время как эта работа происходит тогда, ключ, возвращенный этим методом, будет отменен и поэтому будет недопустим.
sel
- Селектор, в котором должен быть зарегистрирован этот каналops
- Интерес устанавливается для получающегося ключаatt
- Присоединение для получающегося ключа; может быть nullClosedChannelException
- Если этот канал закрываетсяClosedSelectorException
- Если селектор закрываетсяIllegalBlockingModeException
- Если этот канал находится в блокировании режимаIllegalSelectorException
- Если этот канал не создавался тем же самым провайдером как данный селекторCancelledKeyException
- Если этот канал в настоящий момент регистрируется в данном селекторе, но соответствующий ключ был уже отмененIllegalArgumentException
- Если немного в наборе ops не соответствует работе, которая поддерживается этим каналом, то есть, если set & ~validOps() != 0public final SelectionKey register(Selector sel, int ops) throws ClosedChannelException
Вызов этого метода удобства формы
sc.register(sel, ops)ведет себя точно таким же образом как вызов
sc.register
(sel, ops, null)
sel
- Селектор, в котором должен быть зарегистрирован этот каналops
- Интерес устанавливается для получающегося ключаClosedChannelException
- Если этот канал закрываетсяClosedSelectorException
- Если селектор закрываетсяIllegalBlockingModeException
- Если этот канал находится в блокировании режимаIllegalSelectorException
- Если этот канал не создавался тем же самым провайдером как данный селекторCancelledKeyException
- Если этот канал в настоящий момент регистрируется в данном селекторе, но соответствующий ключ был уже отмененIllegalArgumentException
- Если немного в ops не соответствует работе, которая поддерживается этим каналом, то есть, если set & ~validOps() != 0public abstract SelectableChannel configureBlocking(boolean block) throws IOException
Если этот канал будет зарегистрирован в одном или более селекторах тогда попытка поместить, то он в блокирование режима вызовет IllegalBlockingModeException
быть брошенным.
В любое время может быть вызван этот метод. Новый режим блокирования будет только влиять на операции ввода-вывода, которые инициируются после этого метода возвраты. Для некоторых реализаций это может потребовать блокирования, пока все операции ввода-вывода на ожидании не полны.
Если этот метод вызывается в то время как другой вызов этого метода или register
метод происходит тогда, он сначала блокирует, пока другая работа не полна.
block
- Если true тогда этот канал будет помещен в блокирование режима; если false тогда это будет помещено, неблокируя режимClosedChannelException
- Если этот канал закрываетсяIllegalBlockingModeException
- Если block является true, и этот канал регистрируется в одном или более селекторахIOException
- Если ошибка ввода-вывода происходитpublic abstract boolean isBlocking()
Если этот канал закрывается тогда, значение, возвращенное этим методом, не определяется.
public abstract Object blockingLock()
configureBlocking
и register
методы синхронизируются. Это часто полезно в реализации адаптеров, которые требуют, чтобы определенный режим блокирования сохранялся в течение короткого периода времени.
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.