Класс 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 |
Регистрирует этот канал с заданным селектором, возвращая ключ выбора. |
Методы, объявленные в классе java.nio.channels.SelectableChannel
register, validOps
Методы, объявленные в классе java.nio.channels.spi.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, 2021, 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/17/docs/api/java.base/java/nio/channels/spi/AbstractSelectableChannel.html