Учебники

Java NIO — Селектор

Как мы знаем, Java NIO поддерживает множественные транзакции от и до каналов и буферов. Таким образом, чтобы изучить один или несколько каналов NIO и определить, какие каналы готовы к транзакции данных, т. Е. Чтение или запись, Java NIO обеспечивает Selector.

С помощью Selector мы можем создать поток, который будет знать, какой канал готов для записи и чтения данных и может обрабатывать этот конкретный канал.

Мы можем получить экземпляр селектора, вызвав его статический метод open (). После открытия селектора мы должны зарегистрировать канал неблокирующего режима, который возвращает экземпляр SelectionKey.

SelectionKey — это набор операций, которые можно выполнить с каналом, или мы можем сказать, что мы можем узнать состояние канала с помощью клавиши выбора.

Основные операции или состояние канала, представленные клавишей выбора:

  • SelectionKey.OP_CONNECT — канал, который готов к подключению к серверу.

  • SelectionKey.OP_ACCEPT — канал, который готов принимать входящие соединения.

  • SelectionKey.OP_READ — канал, который готов к чтению данных.

  • SelectionKey.OP_WRITE — канал, который готов к записи данных.

SelectionKey.OP_CONNECT — канал, который готов к подключению к серверу.

SelectionKey.OP_ACCEPT — канал, который готов принимать входящие соединения.

SelectionKey.OP_READ — канал, который готов к чтению данных.

SelectionKey.OP_WRITE — канал, который готов к записи данных.

Ключ выбора, полученный после регистрации, имеет несколько важных методов, как указано ниже —

  • attach () — этот метод используется для прикрепления объекта с помощью ключа. Основная цель присоединения объекта к каналу — это распознавание того же канала.

  • attachment () — этот метод используется для сохранения прикрепленного объекта из канала.

  • channel () — Этот метод используется для получения канала, для которого создается конкретный ключ.

  • selector () — этот метод используется для получения селектора, для которого создан определенный ключ.

  • isValid () — Этот метод возвращает погоду, ключ действителен или нет.

  • isReadable () — Этот метод заявляет, что канал ключа погоды готов для чтения или нет.

  • isWritable () — этот метод утверждает, что канал ключа погоды готов к записи или нет.

  • isAcceptable () — Этот метод сообщает, что канал ключа погоды готов к приему входящего соединения или нет.

  • isConnectable () — Этот метод проверяет, завершил ли канал этого ключа свою операцию соединения через сокет.

  • isAcceptable () — Этот метод проверяет, готов ли канал этого ключа принять новое соединение с сокетом.

  • InterestOps () — Этот метод получает набор интересов этого ключа.

  • readyOps () — этот метод извлекает готовый набор, представляющий собой набор операций, для которых канал готов.

attach () — этот метод используется для прикрепления объекта с помощью ключа. Основная цель присоединения объекта к каналу — это распознавание того же канала.

attachment () — этот метод используется для сохранения прикрепленного объекта из канала.

channel () — Этот метод используется для получения канала, для которого создается конкретный ключ.

selector () — этот метод используется для получения селектора, для которого создан определенный ключ.

isValid () — Этот метод возвращает погоду, ключ действителен или нет.

isReadable () — Этот метод заявляет, что канал ключа погоды готов для чтения или нет.

isWritable () — этот метод утверждает, что канал ключа погоды готов к записи или нет.

isAcceptable () — Этот метод сообщает, что канал ключа погоды готов к приему входящего соединения или нет.

isConnectable () — Этот метод проверяет, завершил ли канал этого ключа свою операцию соединения через сокет.

isAcceptable () — Этот метод проверяет, готов ли канал этого ключа принять новое соединение с сокетом.

InterestOps () — Этот метод получает набор интересов этого ключа.

readyOps () — этот метод извлекает готовый набор, представляющий собой набор операций, для которых канал готов.

Мы можем выбрать канал из селектора, вызвав его статический метод select (). Метод выбора селектора перегружен как —

  • select () — этот метод блокирует текущий поток, пока хотя бы один канал не будет готов к событиям, для которых он зарегистрирован.

  • select (long timeout) — Этот метод делает то же самое, что и select (), за исключением того, что он блокирует поток на максимальное время ожидания в миллисекундах (параметр).

  • selectNow () — этот метод вообще не блокируется. Он сразу же возвращается, когда каналы готовы.

select () — этот метод блокирует текущий поток, пока хотя бы один канал не будет готов к событиям, для которых он зарегистрирован.

select (long timeout) — Этот метод делает то же самое, что и select (), за исключением того, что он блокирует поток на максимальное время ожидания в миллисекундах (параметр).

selectNow () — этот метод вообще не блокируется. Он сразу же возвращается, когда каналы готовы.

Также для того, чтобы оставить заблокированный поток, который вызывает метод select, из экземпляра селектора можно вызвать метод wakeup (), после чего поток, ожидающий внутри select (), немедленно вернется.

Наконец, мы можем закрыть селектор, вызвав метод close (), который также делает недействительными все экземпляры SelectionKey, зарегистрированные в этом селекторе, вместе с закрытием селектора.