Spec-Zone.ru › OpenJDK 25

Класс 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
Бит набора операций для операций принятия сокетных соединений.
static final int OP_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()
Возвращает селектор, для которого был создан этот ключ.

Методы, объявленные в классе 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

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

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

isAcceptable

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

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

    k.readyOps() & OP_ACCEPT != 0

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

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

attach

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

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

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

attachment

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

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по 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/SelectionKey.html

Spec-Zone.ru

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