Spec-Zone.ru › OpenJDK 21

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

Методы, объявленные в классе 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, 2023, 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/21/docs/api/java.base/java/nio/channels/SelectableChannel.html

Spec-Zone.ru

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