Spec-Zone.ru › OpenJDK 24

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

Краткое описание конструкторов

SelectableChannel()
Модификатор Конструктор Описание
protected
Инициализирует новый экземпляр этого класса.

Краткое описание методов

Модификатор и тип Метод Описание
abstract Object blockingLock()
Возвращает объект, на котором синхронизируются методы configureBlocking и register.
abstract SelectableChannel configureBlocking(boolean block)
Изменяет режим блокировки этого канала.
abstract boolean isBlocking()
Указывает, будут ли все операции ввода-вывода на этом канале блокироваться до завершения.
abstract boolean isRegistered()
Указывает, зарегистрирован ли этот канал в настоящее время с какими-либо селекторами.
abstract SelectionKey keyFor(Selector sel)
Возвращает ключ, представляющий регистрацию канала с заданным селектором.
abstract SelectorProvider provider()
Возвращает поставщика, который создал этот канал.
final 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

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, 2025, 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/nio/channels/SelectableChannel.html

Spec-Zone.ru

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