Класс 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 |
Атомарно задаёт для набора интересующих операций этого ключа побитовое пересечение («и») существующего набора интересующих операций и указанного значения. |
int |
interestOpsOr |
Атомарно задаёт для набора интересующих операций этого ключа побитовое объединение («или») существующего набора интересующих операций и указанного значения. |
final boolean |
isAcceptable() |
Проверяет, готов ли канал этого ключа принять новое сокетное соединение. |
final boolean |
isConnectable() |
Проверяет, завершил ли канал этого ключа операцию сокетного подключения или не смог её завершить. |
final boolean |
isReadable() |
Проверяет, готов ли канал этого ключа к чтению. |
abstract boolean |
isValid() |
Проверяет, действителен ли этот ключ. |
final boolean |
isWritable() |
Проверяет, готов ли канал этого ключа к записи. |
abstract int |
readyOps() |
Возвращает набор готовых операций этого ключа. |
abstract Selector |
selector() |
Возвращает селектор, для которого был создан этот ключ. |
Подробное описание полей
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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/nio/channels/SelectionKey.html