Класс AbstractSelector
- Все реализуемые интерфейсы:
Closeable, AutoCloseable
public abstract class AbstractSelector extends Selector
Этот класс инкапсулирует низкоуровневые механизмы, необходимые для реализации прерывания операций выбора. Конкретный класс селектора должен вызывать методы begin и end соответственно до и после вызова операции ввода-вывода, которая может заблокироваться на неопределённое время. Чтобы гарантировать, что метод end будет вызван всегда, эти методы следует использовать в блоке try ... finally:
try {
begin();
// Perform blocking I/O operation here
...
} finally {
end();
}
Этот класс также определяет методы для обслуживания набора отменённых ключей селектора и удаления ключа из набора ключей его канала, а также объявляет абстрактный метод register, который вызывается методом register выбираемого канала для выполнения фактической регистрации канала.
- С момента:
- 1.4
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Инициализирует новый экземпляр этого класса. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
protected final void |
begin() |
Отмечает начало операции ввода-вывода, которая может заблокироваться на неопределённое время. |
protected final Set |
cancelledKeys() |
Возвращает набор отменённых ключей этого селектора. |
final void |
close() |
Закрывает этот селектор. |
protected final void |
deregister |
Удаляет заданный ключ из набора ключей его канала. |
protected final void |
end() |
Отмечает окончание операции ввода-вывода, которая может заблокироваться на неопределённое время. |
protected abstract void |
implCloseSelector() |
Закрывает этот селектор. |
final boolean |
isOpen() |
Показывает, открыт ли этот селектор. |
final SelectorProvider |
provider() |
Возвращает провайдера, создавшего этот канал. |
protected abstract SelectionKey |
register |
Регистрирует заданный канал в этом селекторе. |
Подробное описание конструкторов
AbstractSelector
protected AbstractSelector(SelectorProvider provider)
- Параметры:
-
provider— провайдер, создавший этот селектор
Подробное описание методов
close
public final void close() throws IOException
Если селектор уже закрыт, этот метод немедленно возвращает управление. В противном случае он помечает селектор как закрытый, а затем вызывает метод implCloseSelector для завершения операции закрытия.
- Определён в:
-
closeв интерфейсеAutoCloseable - Определён в:
-
closeв интерфейсеCloseable - Определён в:
-
closeв классеSelector - Вызывает исключение:
-
IOException— если произошла ошибка ввода-вывода
implCloseSelector
protected abstract void implCloseSelector() throws IOException
Этот метод вызывается методом close для фактического закрытия селектора. Он вызывается только в том случае, если селектор ещё не был закрыт, и никогда не вызывается более одного раза.
Реализация этого метода должна обеспечить немедленный возврат любого другого потока, заблокированного при выполнении операции выбора на этом селекторе, как если бы был вызван метод wakeup.
- Вызывает исключение:
-
IOException— если при закрытии селектора произошла ошибка ввода-вывода
isOpen
provider
cancelledKeys
protected final Set<SelectionKey> cancelledKeys()
Этот набор следует использовать только при синхронизации на нём.
- Возвращает:
- Набор отменённых ключей
register
protected abstract SelectionKey register(AbstractSelectableChannel ch, int ops, Object att)
Этот метод вызывается методом register канала для фактической регистрации канала в этом селекторе.
- Параметры:
-
ch— регистрируемый канал -
ops— начальный набор интересующих событий, который должен быть допустимым -
att— исходное присоединённое значение для создаваемого ключа - Возвращает:
- Новый ключ, представляющий регистрацию заданного канала в этом селекторе
deregister
protected final void deregister(AbstractSelectionKey key)
Селектор должен вызывать этот метод для каждого канала, регистрацию которого он отменяет.
- Параметры:
-
key— удаляемый ключ выбора
begin
protected final void begin()
Этот метод следует вызывать вместе с методом end в блоке try ... finally, как показано выше, чтобы реализовать прерывание для этого селектора.
Вызов этого метода обеспечивает вызов метода wakeup селектора, если во время блокировки потока при выполнении операции ввода-вывода с селектором вызывается метод interrupt этого потока.
end
© 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://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/nio/channels/spi/AbstractSelector.html