Класс 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 всегда находятся в режиме блокировки. Режим неблокирующей работы наиболее полезен в сочетании с мультиплексированием на основе селектора. Канал должен быть переведён в неблокирующий режим перед регистрацией с селектором, и не может быть возвращён в блокирующий режим до тех пор, пока он не будет дерегистрирован.
- C момента:
- 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, isOpen Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Методы, унаследованные от интерфейса java.nio.channels.Channel
close, 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.