Класс 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 int | OP_ACCEPT | Бит набора операций для операций принятия сокета. |
static int | OP_CONNECT | Бит набора операций для операций подключения сокета. |
static int | OP_READ | Бит набора операций для операций чтения. |
static int | OP_WRITE | Бит набора операций для операций записи. |
Конструкторы
| Модификатор | Конструктор | Описание |
|---|---|---|
protected | SelectionKey() | Конструирует экземпляр этого класса. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
Object | attach(Object ob) | Прикрепляет заданный объект к этому ключу. |
Object | attachment() | Возвращает текущее прикрепление. |
abstract void | cancel() | Запрашивает отмену регистрации канала этого ключа в его селекторе. |
abstract SelectableChannel | channel() | Возвращает канал, для которого был создан этот ключ. |
abstract int | interestOps() | Возвращает набор интересов этого ключа. |
abstract SelectionKey | interestOps(int ops) | Устанавливает набор интересов этого ключа в заданное значение. |
int | interestOpsAnd(int ops) | Атомарно устанавливает набор интересов этого ключа в битовое пересечение ("и") существующего набора интересов и заданного значения. |
int | interestOpsOr(int ops) | Атомарно устанавливает набор интересов этого ключа в битовое объединение ("или") существующего набора интересов и заданного значения. |
boolean | isAcceptable() | Проверяет, готов ли канал этого ключа принять новое соединение сокета. |
boolean | isConnectable() | Проверяет, завершил ли канал этого ключа операцию подключения сокета или не смог её завершить. |
boolean | isReadable() | Проверяет, готов ли канал этого ключа для чтения. |
abstract boolean | isValid() | Указывает, действителен ли этот ключ. |
boolean | isWritable() | Проверяет, готов ли канал этого ключа для записи. |
abstract int | readyOps() | Возвращает набор операций готовности этого ключа. |
abstract Selector | selector() | Возвращает селектор, для которого был создан этот ключ. |
Методы, объявленные в классе java.lang.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()
Конструирует экземпляр этого класса.
Методы
канал
public abstract SelectableChannel channel()
Возвращает канал, для которого был создан этот ключ. Этот метод будет продолжать возвращать канал даже после отмены ключа.
- Возвращает:
- Канал этого ключа
селектор
public abstract Selector selector()
Возвращает селектор, для которого был создан этот ключ. Этот метод будет продолжать возвращать селектор даже после отмены ключа.
- Возвращает:
- Селектор этого ключа
isValid
public abstract boolean isValid()
Определяет, является ли этот ключ допустимым.
Ключ является допустимым при создании и остается таковым до тех пор, пока он не будет отменён, его канал не будет закрыт или его селектор не будет закрыт.
- Возвращает:
-
trueесли и только если этот ключ действителен
отмена
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- Если этот ключ был отменён
присоединить
public final Object attach(Object ob)
Присоединяет заданный объект к этому ключу.
Присоединённый объект может быть позже получен через метод attachment. Одновременно может быть присоединён только один объект; вызов этого метода приводит к тому, что любое предыдущее присоединение будет отброшено. Текущее присоединение может быть отброшено путём присоединения null.
- Параметры:
-
ob- Объект для присоединения; может бытьnull - Возвращает:
- Предыдущий присоединённый объект, если таковой имеется, иначе
null
присоединение
public final Object attachment()
Возвращает текущее присоединение.
- Возвращает:
- Объект, в настоящее время присоединённый к этому ключу, или
nullесли присоединения нет
© 1993, 2020, 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/11/docs/api/java.base/java/nio/channels/SelectionKey.html