Класс SelectableChannel
- java.lang.Object
-
- java.nio.channels.spi.AbstractInterruptibleChannel
-
- java.nio.channels.SelectableChannel
- Все реализуемые интерфейсы:
-
Closeable,AutoCloseable,Channel,InterruptibleChannel
- Непосредственные известные подклассы:
AbstractSelectableChannel
public abstract class SelectableChannel extends AbstractInterruptibleChannel implements Channel
Канал, который может быть мультиплексирован с помощью Selector.
Для использования с селектором, экземпляр этого класса должен быть предварительно зарегистрирован с помощью метода register. Этот метод возвращает новый объект SelectionKey, представляющий регистрацию канала в селекторе.
После регистрации с селектором канал остаётся зарегистрированным до его дерегистрации. Это включает в себя освобождение ресурсов, выделенных каналу селектором.
Канал не может быть дерегистрирован напрямую; вместо этого, ключ, представляющий его регистрацию, должен быть отменён. Отмена ключа запрашивает де регистрацию канала во время следующей операции выбора селектора. Ключ может быть отменён явно, вызвав его метод cancel. Все ключи канала неявно отменяются при закрытии канала, независимо от того, вызвался ли метод close или же поток был прерван при блокировании в операции ввода-вывода по каналу.
Если сам селектор закрыт, то канал будет дерегистрирован, а ключ, представляющий его регистрацию, будет недействительным без задержки.
Канал может быть зарегистрирован не более одного раза с любым конкретным селектором.
Регистрация канала с одним или несколькими селекторами может быть определена вызовом метода isRegistered.
Каналы Selectable безопасны для использования несколькими конкурирующими потоками.
Режим блокировки
Каналы Selectable могут быть в режиме блокировки или в режиме без блокировки. В режиме блокировки каждая операция ввода-вывода, вызываемая на канале, будет блокировать выполнение, пока она не завершится. В режиме без блокировки операция ввода-вывода никогда не будет блокировать и может передать меньше байт, чем запрошено, или вообще не передать ни одного байта. Режим блокировки канала Selectable можно определить, вызвав его методisBlocking. Новосозданные каналы Selectable всегда находятся в режиме блокировки. Режим без блокировки наиболее полезен в сочетании с мультиплексированием на основе селектора. Канал должен быть переведён в режим без блокировки перед регистрацией с селектором и не может быть возвращён в режим блокировки до его дерегистрации.
- С:
- 1.4
- См. также:
-
SelectionKey,Selector
Конструкторы
| Модификатор | Конструктор | Описание |
|---|---|---|
protected | SelectableChannel() | Инициализирует новый экземпляр этого класса. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract Object | blockingLock() | Возвращает объект, на котором синхронизируются методы |
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() | Возвращает набор операций, определяющий поддерживаемые операции данного канала. |
Методы, объявленные в классе java.nio.channels.spi.AbstractInterruptibleChannel
begin, close, end, implCloseChannel Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Методы, объявленные в интерфейсе java.nio.channels.Channel
isOpen Конструкторы
SelectableChannel
protected SelectableChannel()
Инициализирует новый экземпляр этого класса.
Методы
provider
public abstract SelectorProvider provider()
Возвращает поставщика, который создал этот канал.
- Возвращает:
- Поставщика, который создал этот канал
validOps
public abstract int validOps()
Возвращает набор операций, определяющий поддерживаемые операции этого канала. Бит, установленный в этом целочисленном значении, обозначает именно те операции, которые допустимы для этого канала. Для данного конкретного класса канала этот метод всегда возвращает одно и то же значение.
- Возвращает:
- Набор допустимых операций
isRegistered
public abstract boolean isRegistered()
Указывает, зарегистрирован ли этот канал в настоящее время с какими-либо селекторами. Недавно созданный канал не зарегистрирован.
Из-за свойственной задержки между отменой ключа и разрегистрацией канала, канал может оставаться зарегистрированным некоторое время после отмены всех его ключей. Канал также может оставаться зарегистрированным некоторое время после закрытия.
- Возвращает:
-
trueесли и только если этот канал зарегистрирован
keyFor
public abstract SelectionKey keyFor(Selector sel)
Извлекает ключ, представляющий регистрацию канала с заданным селектором.
- Параметры:
-
sel- Селектор - Возвращает:
- Ключ, возвращённый при последней регистрации этого канала с заданным селектором, или
nullесли этот канал в настоящее время не зарегистрирован с этим селектором
register
public abstract SelectionKey register(Selector sel,
int ops,
Object att)
throws ClosedChannelException Регистрирует этот канал с заданным селектором, возвращая ключ выбора.
Если этот канал уже зарегистрирован с данным селектором, то возвращается ключ выбора, представляющий эту регистрацию. Набор интересов ключа будет изменён на ops, как если бы был вызван метод interestOps(int). Если аргумент att не равен null, то привязка ключа будет установлена к этому значению. Будет выброшено исключение CancelledKeyException, если ключ уже отменён.
В противном случае этот канал ещё не зарегистрирован с данным селектором, поэтому он регистрируется, и возвращается полученный новый ключ. Начальный набор интересов ключа будет ops, а его привязка будет att.
Этот метод может быть вызван в любое время. Если этот метод вызывается во время выполнения операции выбора, то он не оказывает никакого влияния на эту операцию; новая регистрация или изменение набора интересов ключа будут видны следующей операцией выбора. Если этот метод вызывается во время вызова configureBlocking, он будет блокироваться до тех пор, пока режим блокировки канала не будет изменён.
Если этот канал закрыт во время выполнения этой операции, то ключ, возвращённый этим методом, будет отменён и, следовательно, недействителен.
- Параметры:
-
sel- Селектор, с которым будет зарегистрирован этот канал -
ops- Набор интересов для результирующего ключа -
att- Привязка для результирующего ключа; может бытьnull - Возвращает:
- Ключ, представляющий регистрацию этого канала с заданным селектором
- Исключения:
-
ClosedChannelException- Если этот канал закрыт -
ClosedSelectorException- Если селектор закрыт -
IllegalBlockingModeException- Если этот канал находится в режиме блокировки -
IllegalSelectorException- Если этот канал не был создан тем же поставщиком, что и заданный селектор -
CancelledKeyException- Если этот канал в настоящее время зарегистрирован с заданным селектором, но соответствующий ключ уже отменён -
IllegalArgumentException- Если бит в набореopsне соответствует операции, поддерживаемой этим каналом, то есть, еслиset & ~validOps() != 0
register
public 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() != 0
configureBlocking
public abstract SelectableChannel configureBlocking(boolean block)
throws IOException Изменяет режим блокировки этого канала.
Если этот канал зарегистрирован с одним или несколькими селекторами, то попытка поместить его в режим блокировки приведёт к выбросу исключения IllegalBlockingModeException.
Этот метод может быть вызван в любое время. Новый режим блокировки повлияет только на операции ввода-вывода, инициированные после возвращения этого метода. В некоторых реализациях это может потребовать блокировки до завершения всех ожидающих операций ввода-вывода.
Если этот метод вызывается во время другого вызова этого метода или метода register, то он сначала заблокируется до завершения другой операции.
- Параметры:
-
block- Еслиtrueто этот канал будет помещён в режим блокировки; еслиfalseто он будет помещён в режим без блокировки - Возвращает:
- Этот канал с выбором
- Исключения:
-
ClosedChannelException- Если этот канал закрыт -
IllegalBlockingModeException- Еслиblockравноtrueи этот канал зарегистрирован с одним или несколькими селекторами -
IOException- Если произошла ошибка ввода-вывода
isBlocking
public abstract boolean isBlocking()
Указывает, будет ли каждая операция ввода-вывода на этом канале блокироваться до её завершения. Недавно созданный канал всегда находится в режиме блокировки.
Если этот канал закрыт, то возвращаемое значение этим методом не определено.
- Возвращает:
-
trueесли и только если этот канал находится в режиме блокировки
blockingLock
public abstract Object blockingLock()
Возвращает объект, на котором синхронизируются методы configureBlocking и register. Это часто полезно при реализации адаптеров, которые требуют поддержания определённого режима блокировки на короткий промежуток времени.
- Возвращает:
- Объект блокировки режима
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/channels/SelectableChannel.html