Spec-Zone.ru › OpenJDK 25

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

Селектируемые каналы безопасны для использования несколькими потоками одновременно.

Режим блокировки

Селектируемый канал находится либо в блокирующем, либо в неблокирующем режиме. В блокирующем режиме каждая операция ввода-вывода, вызванная для канала, будет блокироваться до своего завершения. В неблокирующем режиме операция ввода-вывода никогда не будет блокироваться и может передать меньше байтов, чем запрашивалось, или вообще не передать ни одного байта. Режим блокировки селектируемого канала можно определить, вызвав его метод isBlocking.

Новые селектируемые каналы всегда создаются в блокирующем режиме. Неблокирующий режим наиболее полезен в сочетании с мультиплексированием на основе селектора. Перед регистрацией в селекторе канал необходимо перевести в неблокирующий режим; вернуть его в блокирующий режим можно только после отмены регистрации.

С версии:
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()
Возвращает набор операций, определяющий операции, поддерживаемые этим каналом.

Методы, объявленные в классе AbstractInterruptibleChannel

begin, close, end, implCloseChannel, isOpen

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Методы, объявленные в интерфейсе 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. Это часто бывает полезно при реализации адаптеров, которым необходимо поддерживать определённый режим блокировки в течение короткого периода времени.
Возвращает:
Объект блокировки режима

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и работающие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её дочерних компаний в США и других странах.
Авторское право © 1993, 2025, Oracle и/или её дочерние компании, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/nio/channels/SelectableChannel.html

Spec-Zone.ru

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