Spec-Zone.ru › OpenJDK 21

Класс SelectionKey

java.lang.Object
java.nio.channels.SelectionKey
Прямые известные подклассы:
AbstractSelectionKey
public abstract class SelectionKey extends Object
Токен, представляющий регистрацию SelectableChannel с Selector.

Каждый раз при регистрации канала с селектором создается новый ключ. Ключ остается действительным до тех пор, пока его не отменят, вызвав метод cancel, не закроют канал или селектор. Отмена ключа не приводит к его немедленному удалению из селектора; вместо этого он добавляется в множество отменённых ключей селектора для удаления во время следующей операции выбора. Действительность ключа можно проверить, вызвав метод isValid.

Ключ выбора содержит два набора операций, представленные в виде целых чисел. Каждый бит в наборе операций обозначает категорию выбираемых операций, поддерживаемых каналом ключа.

  • Набор интереса определяет, какие категории операций будут проверяться на готовность при следующем вызове одного из методов выбора селектора. Набор интереса инициализируется значением, заданным при создании ключа; его можно изменить позже с помощью метода interestOps(int).

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

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

В этом классе определены все известные биты набора операций, но точный набор битов, поддерживаемых данным каналом, зависит от типа канала. Каждый подкласс SelectableChannel определяет метод validOps(), возвращающий набор, идентифицирующий только те операции, которые поддерживает канал. Попытка установить или проверить бит набора операций, который не поддерживается каналом ключа, приведёт к соответствующей исключительной ситуации во время выполнения.

Часто необходимо связать некоторые данные, специфичные для приложения, с ключом выбора, например, объект, представляющий состояние протокола более высокого уровня и обрабатывающий уведомления о готовности для реализации этого протокола. Поэтому ключи выбора поддерживают прикрепление одного произвольного объекта к ключу. Объект можно прикрепить с помощью метода attach, а затем извлечь с помощью метода attachment.

Ключи выбора безопасны для использования несколькими параллельными потоками. Операция выбора всегда будет использовать значение набора интереса, которое было текущим в момент начала операции.

С тех пор:
1.4
См. также:
  • SelectableChannel
  • Selector

Краткое описание полей

Модификатор и тип Поле Описание
static final int OP_ACCEPT
Бит набора операций для операций socket-accept.
static final int OP_CONNECT
Бит набора операций для операций socket-connect.
static final int OP_READ
Бит набора операций для операций чтения.
static final int OP_WRITE
Бит набора операций для операций записи.

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

SelectionKey()
Модификатор Конструктор Описание
protected
Конструирует экземпляр этого класса.

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

Модификатор и тип Метод Описание
final Object attach(Object ob)
Прикрепляет заданный объект к этому ключу.
final Object attachment()
Возвращает текущее прикрепление.
abstract void cancel()
Запрашивает отмену регистрации канала этого ключа с его селектором.
abstract SelectableChannel channel()
Возвращает канал, для которого был создан этот ключ.
abstract int interestOps()
Возвращает набор интересов этого ключа.
abstract SelectionKey interestOps(int ops)
Устанавливает набор интересов этого ключа в заданное значение.
int interestOpsAnd(int ops)
Атомарно устанавливает набор интересов этого ключа в пересечение (логическое И) существующего набора интересов и заданного значения.
int interestOpsOr(int ops)
Атомарно устанавливает набор интересов этого ключа в объединение (логическое ИЛИ) существующего набора интересов и заданного значения.
final boolean isAcceptable()
Проверяет, готов ли канал этого ключа принять новое подключение сокета.
final boolean isConnectable()
Проверяет, завершила ли операция подключения сокета к каналу этого ключа или не смогла завершиться.
final boolean isReadable()
Проверяет, готов ли канал этого ключа для чтения.
abstract boolean isValid()
Определяет, является ли этот ключ действительным.
final boolean isWritable()
Проверяет, готов ли канал этого ключа для записи.
abstract int readyOps()
Возвращает набор готовности операций этого ключа.
abstract Selector selector()
Возвращает селектор, для которого был создан этот ключ.

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

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

Подробное описание полей

OP_READ

public static final int OP_READ
Флаг набора операций для операций чтения.

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

См. также:
  • Значения постоянных полей

OP_WRITE

public static final int OP_WRITE
Флаг набора операций для операций записи.

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

См. также:
  • Значения постоянных полей

OP_CONNECT

public static final int OP_CONNECT
Флаг набора операций для операций подключения сокета.

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

См. также:
  • Значения постоянных полей

OP_ACCEPT

public static final int OP_ACCEPT
Флаг набора операций для операций приёма сокета.

Предположим, что множество интересов ключа выбора содержит OP_ACCEPT в начале операции выбора. Если селектор обнаруживает, что соответствующий серверный сокет-канал готов принять другое подключение или имеет ошибку, то он добавит OP_ACCEPT в набор готовых операций ключа.

См. также:
  • Значения постоянных полей

Подробное описание конструкторов

SelectionKey

protected SelectionKey()
Создаёт экземпляр этого класса.

Подробное описание методов

channel

public abstract SelectableChannel channel()
Возвращает канал, для которого был создан этот ключ. Этот метод будет продолжать возвращать канал даже после отмены ключа.
Возвращает:
Канал этого ключа

selector

public abstract Selector selector()
Возвращает селектор, для которого был создан этот ключ. Этот метод будет продолжать возвращать селектор даже после отмены ключа.
Возвращает:
Селектор этого ключа

isValid

public abstract boolean isValid()
Определяет, является ли этот ключ валидным.

Ключ является валидным при создании и остаётся таковым до отмены, закрытия его канала или закрытия его селектора.

Возвращает:
true если и только если этот ключ является валидным

cancel

public abstract void cancel()
Запрашивает отмену регистрации канала этого ключа с его селектором. После возврата ключ будет невалидным и будет добавлен в набор отменённых ключей селектора. Ключ будет удалён из всех наборов ключей селектора во время следующей операции выбора.

Если этот ключ уже был отменён, вызов этого метода не оказывает никакого эффекта. После отмены ключ остаётся невалидным навсегда.

Этот метод может быть вызван в любое время. Он синхронизируется на наборе отменённых ключей селектора и, следовательно, может временно заблокироваться, если вызван одновременно с операцией отмены или выбора, включающей тот же селектор.

interestOps

public abstract int interestOps()
Возвращает множество интересов этого ключа.

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

Возвращает:
Множество интересов этого ключа
Исключения:
CancelledKeyException - Если этот ключ был отменён

interestOps

public abstract SelectionKey interestOps(int ops)
Устанавливает множество интересов этого ключа заданным значением.

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

Параметры:
ops - Новое множество интересов
Возвращает:
Этот ключ выбора
Исключения:
IllegalArgumentException - Если бит в множестве не соответствует операции, поддерживаемой каналом этого ключа, то есть, если (ops & ~channel().validOps()) != 0
CancelledKeyException - Если этот ключ был отменён

interestOpsOr

public int interestOpsOr(int ops)
Атомарно устанавливает множество интересов этого ключа в битовое объединение ("или") существующего множества интересов и заданного значения. Этот метод гарантированно является атомарным относительно других одновременных вызовов этого метода или метода interestOpsAnd(int).

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

Требования к реализации:
Стандартная реализация синхронизируется на этом ключе и вызывает interestOps() и interestOps(int) для получения и установки множества интересов этого ключа.
Параметры:
ops - Множество интересов для применения
Возвращает:
Предыдущее множество интересов
Исключения:
IllegalArgumentException - Если бит в множестве не соответствует операции, поддерживаемой каналом этого ключа, то есть, если (ops & ~channel().validOps()) != 0
CancelledKeyException - Если этот ключ был отменён
С:
11

interestOpsAnd

public int interestOpsAnd(int ops)
Атомарно устанавливает множество интересов этого ключа в битовое пересечение ("и") существующего множества интересов и заданного значения. Этот метод гарантированно является атомарным относительно других одновременных вызовов этого метода или метода interestOpsOr(int).

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

Примечание API:
В отличие от методов interestOps(int) и interestOpsOr(int), этот метод не выбрасывает IllegalArgumentException при вызове с битами в множестве интересов, которые не соответствуют операции, поддерживаемой каналом этого ключа. Это позволяет очистить биты операций в множестве интересов с помощью значений битового дополнения, например, interestOpsAnd(~SelectionKey.OP_READ) удалит OP_READ из множества интересов, не затрагивая другие биты.
Требования к реализации:
Стандартная реализация синхронизируется на этом ключе и вызывает interestOps() и interestOps(int) для получения и установки множества интересов этого ключа.
Параметры:
ops - Множество интересов для применения
Возвращает:
Предыдущее множество интересов
Исключения:
CancelledKeyException - Если этот ключ был отменён
С:
11

readyOps

public abstract int readyOps()
Возвращает набор готовых операций этого ключа.

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

Возвращает:
Набор готовых операций этого ключа
Исключения:
CancelledKeyException - Если этот ключ был отменён

isReadable

public final boolean isReadable()
Проверяет, готов ли канал этого ключа для чтения.

Вызов этого метода в форме k.isReadable() ведет себя точно так же, как выражение

    k.readyOps() & OP_READ != 0

Если канал этого ключа не поддерживает операции чтения, этот метод всегда возвращает false.

Возвращает:
true если и только если readyOps() & OP_READ не равно нулю
Исключения:
CancelledKeyException - Если этот ключ был отменён

isWritable

public final boolean isWritable()
Проверяет, готов ли канал этого ключа для записи.

Вызов этого метода в форме k.isWritable() ведет себя точно так же, как выражение

    k.readyOps() & OP_WRITE != 0

Если канал этого ключа не поддерживает операции записи, этот метод всегда возвращает false.

Возвращает:
true если и только если readyOps() & OP_WRITE не равно нулю
Исключения:
CancelledKeyException - Если этот ключ был отменён

isConnectable

public final boolean isConnectable()
Проверяет, завершил ли канал этого ключа операцию подключения сокета или же эта операция не была завершена.

Вызов этого метода в форме k.isConnectable() ведет себя точно так же, как выражение

    k.readyOps() & OP_CONNECT != 0

Если канал этого ключа не поддерживает операции socket-connect, то этот метод всегда возвращает false.

Возвращает:
true только в том случае, если readyOps() & OP_CONNECT не равно нулю
Выбрасывает:
CancelledKeyException - Если этот ключ был отменен

isAcceptable

public final boolean isAcceptable()
Проверяет, готов ли канал этого ключа принять новое подключение сокета.

Вызов этого метода в форме k.isAcceptable() ведет себя точно так же, как выражение

    k.readyOps() & OP_ACCEPT != 0

Если канал этого ключа не поддерживает операции socket-accept, то этот метод всегда возвращает false.

Возвращает:
true только в том случае, если readyOps() & OP_ACCEPT не равно нулю
Выбрасывает:
CancelledKeyException - Если этот ключ был отменен

attach

public final Object attach(Object ob)
Прикрепляет заданный объект к этому ключу.

Прикрепленный объект может быть позже получен с помощью метода attachment. Одновременно может быть прикреплен только один объект; вызов этого метода приводит к тому, что любое предыдущее прикрепление будет отброшено. Текущее прикрепление может быть отброшено путем прикрепления null.

Параметры:
ob - Объект, который необходимо прикрепить; может быть null
Возвращает:
Предыдущий прикрепленный объект, если таковой имеется, в противном случае null

attachment

public final Object attachment()
Возвращает текущее прикрепление.
Возвращает:
Объект, в настоящее время прикрепленный к этому ключу, или null , если прикрепления нет

© 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/SelectionKey.html

Spec-Zone.ru

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