Spec-Zone.ru › OpenJDK 8

Класс 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API