Spec-Zone.ru › OpenJDK 27

Класс 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)
Атомарно задает набор интересующих операций этого ключа как побитовое пересечение ("and") существующего набора интересующих операций и указанного значения.
int interestOpsOr(int ops)
Атомарно задает набор интересующих операций этого ключа как побитовое объединение ("or") существующего набора интересующих операций и указанного значения.
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
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
boolean equals(Object obj)
Показывает, равен ли этот объект какому-либо другому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии.
Финализация устарела и подлежит удалению в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс среды выполнения для этого Object.
int hashCode()
Возвращает значение хеш-кода для этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно посредством уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно посредством уведомления или прерывания, либо до истечения определенного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно посредством уведомления или прерывания, либо до истечения определенного промежутка реального времени.

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

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)
Атомарно задает набор интересующих операций этого ключа как побитовое объединение ("or") существующего набора интересующих операций и указанного значения. Гарантируется, что этот метод будет атомарным относительно других параллельных вызовов этого метода или метода interestOpsAnd(int).

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

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

interestOpsAnd

public int interestOpsAnd(int ops)
Атомарно задает набор интересующих операций этого ключа как побитовое пересечение ("and") существующего набора интересующих операций и указанного значения. Гарантируется, что этот метод будет атомарным относительно других параллельных вызовов этого метода или метода 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, 2026, 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.

Spec-Zone.ru

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