Класс 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 Бит набора операций для операций accept сокета. |
static int |
OP_CONNECT Бит набора операций для операций 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) Устанавливает набор интереса этого ключа в заданное значение. |
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()
Создаёт экземпляр этого класса.
Методы
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- Если этот ключ отменён
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, 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.