Класс AbstractSelectableChannel
- Все реализуемые интерфейсы:
Closeable, AutoCloseable, Channel, InterruptibleChannel
- Непосредственные известные подклассы:
DatagramChannel, Pipe.SinkChannel, Pipe.SourceChannel, SctpChannel, SctpMultiChannel, SctpServerChannel, ServerSocketChannel, SocketChannel
public abstract class AbstractSelectableChannel extends SelectableChannel
Этот класс определяет методы, управляющие регистрацией и отменой регистрации каналов, а также их закрытием. Он хранит текущий блокирующий режим этого канала и текущий набор его ключей выбора. Он выполняет всю синхронизацию, необходимую для реализации спецификации SelectableChannel. Реализациям защищённых абстрактных методов, определённых в этом классе, не требуется синхронизироваться с другими потоками, которые могут выполнять те же операции.
- С версии:
- 1.4
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Инициализирует новый экземпляр этого класса. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
final Object |
blockingLock() |
Возвращает объект, по которому синхронизируются методы configureBlocking и register. |
final SelectableChannel |
configureBlocking |
Изменяет блокирующий режим этого канала. |
protected final void |
implCloseChannel() |
Закрывает этот канал. |
protected abstract void |
implCloseSelectableChannel() |
Закрывает этот выбираемый канал. |
protected abstract void |
implConfigureBlocking |
Изменяет блокирующий режим этого канала. |
final boolean |
isBlocking() |
Указывает, будут ли все операции ввода-вывода с этим каналом блокироваться до завершения. |
final boolean |
isRegistered() |
Указывает, зарегистрирован ли этот канал в данный момент хотя бы в одном селекторе. |
final SelectionKey |
keyFor |
Возвращает ключ, представляющий регистрацию канала в указанном селекторе. |
final SelectorProvider |
provider() |
Возвращает поставщика, создавшего этот канал. |
final SelectionKey |
register |
Регистрирует этот канал в указанном селекторе и возвращает ключ выбора. |
Методы, объявленные в классе SelectableChannel
register, validOps
Методы, объявленные в классе AbstractInterruptibleChannel
begin, close, end, isOpen
Подробное описание конструкторов
AbstractSelectableChannel
protected AbstractSelectableChannel(SelectorProvider provider)
- Параметры:
-
provider— Поставщик, создавший этот канал
Подробное описание методов
provider
public final SelectorProvider provider()
- Определено в:
-
providerв классеSelectableChannel - Возвращает:
- Поставщик, создавший этот канал
isRegistered
public final boolean isRegistered()
SelectableChannelИз-за неизбежной задержки между отменой ключа и отменой регистрации канала канал может оставаться зарегистрированным некоторое время после отмены всех его ключей. Канал также может оставаться зарегистрированным некоторое время после закрытия.
- Определено в:
-
isRegisteredв классеSelectableChannel - Возвращает:
-
trueтогда и только тогда, когда этот канал зарегистрирован
keyFor
public final SelectionKey keyFor(Selector sel)
SelectableChannel- Определено в:
-
keyForв классеSelectableChannel - Параметры:
-
sel— Селектор - Возвращает:
- Ключ, возвращённый при последней регистрации этого канала в указанном селекторе, или
null, если в данный момент этот канал не зарегистрирован в указанном селекторе
register
public final SelectionKey register(Selector sel, int ops, Object att) throws ClosedChannelException
Сначала этот метод проверяет, открыт ли канал и допустим ли указанный начальный набор интересов.
Если этот канал уже зарегистрирован в указанном селекторе, возвращается ключ выбора, представляющий эту регистрацию, после установки для него указанного набора интересов.
В противном случае этот канал ещё не зарегистрирован в указанном селекторе, поэтому при удержании соответствующих блокировок вызывается метод register селектора. Полученный ключ добавляется в набор ключей этого канала перед возвратом.
- Определено в:
-
registerв классеSelectableChannel - Параметры:
-
sel— Селектор, в котором регистрируется этот канал -
ops— Набор интересов для создаваемого ключа -
att— Присоединяемый объект для создаваемого ключа; может бытьnull - Возвращает:
- Ключ, представляющий регистрацию этого канала в указанном селекторе
- Исключения:
-
ClosedSelectorException— Если селектор закрыт -
IllegalBlockingModeException— Если этот канал находится в блокирующем режиме -
IllegalSelectorException— Если этот канал создан не тем же поставщиком, что и указанный селектор -
CancelledKeyException— Если этот канал в данный момент зарегистрирован в указанном селекторе, но соответствующий ключ уже отменён -
IllegalArgumentException— Если бит в набореopsне соответствует операции, поддерживаемой этим каналом, то есть еслиset & ~validOps() != 0 -
ClosedChannelException— Если этот канал закрыт
implCloseChannel
protected final void implCloseChannel() throws IOException
Этот метод, определённый в классе AbstractInterruptibleChannel и вызываемый методом close, в свою очередь вызывает метод implCloseSelectableChannel для фактического закрытия этого канала. Затем он отменяет все ключи этого канала.
- Определено в:
-
implCloseChannelв классеAbstractInterruptibleChannel - Исключения:
-
IOException— Если при закрытии канала произошла ошибка ввода-вывода
implCloseSelectableChannel
protected abstract void implCloseSelectableChannel() throws IOException
Этот метод вызывается методом close для фактического закрытия канала. Он вызывается только в том случае, если канал ещё не закрыт, и никогда не вызывается более одного раза.
Реализация этого метода должна обеспечить немедленный возврат любого другого потока, заблокированного на операции ввода-вывода с этим каналом, либо путём выброса исключения, либо путём нормального возврата.
- Исключения:
-
IOException— Если произошла ошибка ввода-вывода
isBlocking
public final boolean isBlocking()
SelectableChannelЕсли этот канал закрыт, возвращаемое этим методом значение не определено.
- Определено в:
-
isBlockingв классеSelectableChannel - Возвращает:
-
trueтогда и только тогда, когда этот канал находится в блокирующем режиме
blockingLock
public final Object blockingLock()
SelectableChannelconfigureBlocking и register. Это часто полезно при реализации адаптеров, которым требуется на короткое время сохранять заданный блокирующий режим.- Определено в:
-
blockingLockв классеSelectableChannel - Возвращает:
- Объект блокировки режима
configureBlocking
public final SelectableChannel configureBlocking(boolean block) throws IOException
Если указанный блокирующий режим отличается от текущего, этот метод вызывает метод implConfigureBlocking при удержании соответствующих блокировок, чтобы изменить режим.
- Определено в:
-
configureBlockingв классеSelectableChannel - Параметры:
-
block— Еслиtrue, этот канал будет переведён в блокирующий режим; еслиfalse, он будет переведён в неблокирующий режим - Возвращает:
- Этот выбираемый канал
- Исключения:
-
ClosedChannelException— Если этот канал закрыт -
IOException— Если произошла ошибка ввода-вывода
implConfigureBlocking
protected abstract void implConfigureBlocking(boolean block) throws IOException
Этот метод вызывается методом configureBlocking для фактического изменения блокирующего режима. Он вызывается только в том случае, если новый режим отличается от текущего.
- Параметры:
-
block— Еслиtrue, этот канал будет переведён в блокирующий режим; еслиfalse, он будет переведён в неблокирующий режим - Исключения:
-
IOException— Если произошла ошибка ввода-вывода
© 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/AbstractSelectableChannel.html