Класс 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()

Возвращает объект, на котором синхронизируются методы 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()

Возвращает набор операций, определяющий поддерживаемые операции данного канала.

Методы, объявленные в классе 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

Spec-Zone .ru
спецификации, руководства, описания, API