Класс 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 |
Бит набора операций для операций socket-accept. |
static final int |
OP_CONNECT |
Бит набора операций для операций socket-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- Если этот ключ был отменён - C тех пор:
- 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- Если этот ключ был отменён - C тех пор:
- 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/nio/channels/SelectionKey.html