Spec-Zone.ru › OpenJDK 8

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

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API