Класс SelectionKey
- Прямые известные подклассы:
AbstractSelectionKey
public abstract class SelectionKey extends Object
SelectableChannel в Selector. Ключ выбора создается каждый раз, когда канал регистрируется в селекторе. Ключ остается действительным, пока он не будет отменен вызовом метода cancel, закрытием его канала или закрытием его селектора. Отмена ключа не удаляет его из селектора немедленно; вместо этого он добавляется в набор отмененных ключей селектора для удаления во время следующей операции выбора. Действительность ключа можно проверить, вызвав его метод isValid.
Ключ выбора содержит два набора операций, представленных целочисленными значениями. Каждый бит набора операций обозначает категорию операций выбора, поддерживаемых каналом ключа.
Набор интересующих операций определяет, какие категории операций будут проверяться на готовность при следующем вызове одного из методов выбора селектора. Набор интересующих операций инициализируется значением, заданным при создании ключа; позднее его можно изменить с помощью метода
interestOps(int).Набор готовых операций указывает категории операций, для которых селектор ключа обнаружил готовность канала ключа. Набор готовых операций инициализируется нулем при создании ключа; позднее он может обновляться селектором во время операции выбора, но напрямую обновить его нельзя.
Указание в наборе готовых операций ключа выбора на то, что его канал готов к выполнению некоторой категории операций, является подсказкой, но не гарантией того, что поток сможет выполнить операцию этой категории, не блокируясь. Наиболее точным набор готовых операций, вероятнее всего, будет сразу после завершения операции выбора. Внешние события и операции ввода-вывода, выполняемые над соответствующим каналом, могут сделать его неточным.
Этот класс определяет все известные биты наборов операций, однако то, какие именно биты поддерживаются конкретным каналом, зависит от типа канала. Каждый подкласс SelectableChannel определяет метод validOps(), возвращающий набор, в котором указаны только операции, поддерживаемые каналом. Попытка установить или проверить бит набора операций, не поддерживаемый каналом ключа, приведет к соответствующему исключению времени выполнения.
Часто необходимо связать с ключом выбора некоторые данные, специфичные для приложения, например объект, представляющий состояние протокола более высокого уровня и обрабатывающий уведомления о готовности для реализации этого протокола. Поэтому ключи выбора поддерживают привязку к ключу одного произвольного объекта. Объект можно привязать с помощью метода attach, а затем получить с помощью метода attachment.
Ключи выбора безопасны для использования несколькими параллельными потоками. Операция выбора всегда использует значение набора интересующих операций, актуальное на момент начала операции.
- Начиная с:
- 1.4
- См. также:
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final int |
OP_ACCEPT |
Бит набора операций для операций принятия сокетного соединения. |
static final int |
OP_CONNECT |
Бит набора операций для операций подключения сокета. |
static final int |
OP_READ |
Бит набора операций для операций чтения. |
static final int |
OP_WRITE |
Бит набора операций для операций записи. |
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Создает экземпляр этого класса. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
final Object |
attach |
Привязывает указанный объект к этому ключу. |
final Object |
attachment() |
Возвращает текущую привязку. |
abstract void |
cancel() |
Запрашивает отмену регистрации канала этого ключа в его селекторе. |
abstract SelectableChannel |
channel() |
Возвращает канал, для которого был создан этот ключ. |
abstract int |
interestOps() |
Возвращает набор интересующих операций этого ключа. |
abstract SelectionKey |
interestOps |
Задает для набора интересующих операций этого ключа указанное значение. |
int |
interestOpsAnd |
Атомарно задает набор интересующих операций этого ключа как побитовое пересечение ("and") существующего набора интересующих операций и указанного значения. |
int |
interestOpsOr |
Атомарно задает набор интересующих операций этого ключа как побитовое объединение ("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 |
Показывает, равен ли этот объект какому-либо другому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии. Финализация устарела и подлежит удалению в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс среды выполнения для этого Object. |
int |
hashCode() |
Возвращает значение хеш-кода для этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно посредством уведомления или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно посредством уведомления или прерывания, либо до истечения определенного промежутка реального времени. |
final void |
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, если привязки нет
© 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.