Класс SelectableChannel
- Все реализованные интерфейсы:
-
Closeable,AutoCloseable,Channel,InterruptibleChannel
- Непосредственные известные подклассы:
AbstractSelectableChannel
public abstract class SelectableChannel extends AbstractInterruptibleChannel implements Channel
Selector. Для использования с селектором экземпляр этого класса должен быть предварительно зарегистрирован с помощью метода register. Этот метод возвращает новый объект SelectionKey, представляющий регистрацию канала в селекторе.
После регистрации в селекторе канал остается зарегистрированным до момента дерегистрации. Это включает в себя освобождение ресурсов, выделенных каналу селектором.
Канал не может быть дерегистрирован напрямую; вместо этого ключ, представляющий его регистрацию, должен быть отменён. Отмена ключа запрашивает дерегистрацию канала во время следующей операции выбора селектора. Ключ может быть отменён явно путём вызова его метода cancel. Все ключи канала отменяются неявно при закрытии канала, независимо от того, вызван ли его метод close или прервано ли поток, заблокированный в операции ввода-вывода на канале.
Если сам селектор закрыт, канал будет дерегистрирован, а ключ, представляющий его регистрацию, будет недействительным без дальнейших задержек.
Канал может быть зарегистрирован только один раз с любым конкретным селектором.
Возможность регистрации канала с одним или несколькими селекторами определяется вызовом метода isRegistered.
Селектируемые каналы безопасны для использования несколькими одновременными потоками.
Режим блокировки
Селектируемый канал находится либо в режиме блокировки, либо в режиме неблокирования. В режиме блокировки каждая операция ввода-вывода, вызываемая на канале, будет блокироваться до завершения. В режиме неблокирования операция ввода-вывода никогда не будет блокироваться и может передать меньше байтов, чем было запрошено, или вообще не передать никаких байтов. Режим блокировки селектируемого канала может быть определён путём вызова его методаisBlocking. Новые селектируемые каналы всегда находятся в режиме блокировки. Режим неблокирования наиболее полезен в сочетании с мультиплексированием на основе селекторов. Канал должен быть переведён в режим неблокирования перед его регистрацией в селекторе, и он не может быть возвращён в режим блокирования до его дерегистрации.
- С:
- 1.4
- См. также:
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Инициализирует новый экземпляр этого класса. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract Object |
blockingLock() |
Возвращает объект, на котором синхронизируются методы configureBlocking и register. |
abstract SelectableChannel |
configureBlocking |
Настраивает режим блокировки этого канала. |
abstract boolean |
isBlocking() |
Указывает, будет ли каждая операция ввода-вывода на этом канале блокироваться до завершения. |
abstract boolean |
isRegistered() |
Указывает, зарегистрирован ли этот канал в настоящее время с какими-либо селекторами. |
abstract SelectionKey |
keyFor |
Возвращает ключ, представляющий регистрацию канала с данным селектором. |
abstract SelectorProvider |
provider() |
Возвращает поставщика, который создал этот канал. |
final SelectionKey |
register |
Регистрирует этот канал в заданном селекторе, возвращая ключ выбора. |
abstract SelectionKey |
register |
Регистрирует этот канал в заданном селекторе, возвращая ключ выбора. |
abstract int |
validOps() |
Возвращает набор операций, идентифицирующий поддерживаемые этим каналом операции. |
Методы, объявленные в классе java.nio.channels.spi.AbstractInterruptibleChannel
begin, close, end, implCloseChannel, isOpen
Подробное описание конструкторов
SelectableChannel
protected SelectableChannel()
Подробное описание методов
provider
public abstract SelectorProvider provider()
- Возвращает:
- Поставщик, который создал этот канал
validOps
public abstract int validOps()
- Возвращает:
- Набор допустимых операций
isRegistered
public abstract boolean isRegistered()
Из-за неминуемой задержки между отменением ключа и дерегистрацией канала, канал может оставаться зарегистрированным некоторое время после отмены всех его ключей. Канал также может оставаться зарегистрированным некоторое время после закрытия.
- Возвращает:
-
trueесли и только если этот канал зарегистрирован
keyFor
public abstract SelectionKey keyFor(Selector sel)
- Параметры:
-
sel- Селектор - Возвращает:
- Ключ, возвращенный при последней регистрации этого канала с данным селектором, или
nullесли этот канал в настоящее время не зарегистрирован с этим селектором
register
public abstract SelectionKey register(Selector sel, int ops, Object att) throws ClosedChannelException
Если этот канал в настоящее время зарегистрирован с данным селектором, то возвращается ключ выбора, представляющий эту регистрацию. Набор интересов ключа будет изменен на ops, как если бы вызывали метод interestOps(int). Если аргумент att не равен null, то прикрепление ключа будет установлено к этому значению. CancelledKeyException будет брошен, если ключ уже отменён.
В противном случае этот канал еще не зарегистрирован с заданным селектором, поэтому он регистрируется, и возвращается новый полученный ключ. Начальный набор интересов ключа будет ops, а его прикрепление будет att.
Этот метод может быть вызван в любое время. Если этот метод вызывается во время выполнения операции выбора, то он не влияет на эту операцию; новая регистрация или изменение набора интересов ключа будут видны следующей операцией выбора. Если этот метод вызывается во время вызова configureBlocking, он будет блокироваться до тех пор, пока режим блокировки канала не будет изменён.
Если этот канал закрыт во время выполнения этой операции, то ключ, возвращённый этим методом, будет отменён и, следовательно, недействителен.
- Параметры:
-
sel- Селектор, с которым должен быть зарегистрирован этот канал -
ops- Набор интересов для результирующего ключа -
att- Прикрепление к результирующему ключу; может бытьnull - Возвращает:
- Ключ, представляющий регистрацию этого канала с заданным селектором
- Исключения:
-
ClosedChannelException- Если этот канал закрыт -
ClosedSelectorException- Если селектор закрыт -
IllegalBlockingModeException- Если этот канал в режиме блокировки -
IllegalSelectorException- Если этот канал не был создан тем же поставщиком, что и данный селектор -
CancelledKeyException- Если этот канал в настоящее время зарегистрирован с данным селектором, но соответствующий ключ уже отменён -
IllegalArgumentException- Если бит в набореopsне соответствует операции, поддерживаемой этим каналом, то есть, еслиset & ~validOps() != 0
register
public final SelectionKey register(Selector sel, int ops) throws ClosedChannelException
Вызов этого вспомогательного метода в виде
sc.register(sel, ops) ведет себя точно так же, как вызов sc.register(sel, ops, null)
- Параметры:
-
sel- Селектор, с которым должен быть зарегистрирован этот канал -
ops- Набор интересов для результирующего ключа - Возвращает:
- Ключ, представляющий регистрацию этого канала с заданным селектором
- Исключения:
-
ClosedChannelException- Если этот канал закрыт -
ClosedSelectorException- Если селектор закрыт -
IllegalBlockingModeException- Если этот канал в режиме блокировки -
IllegalSelectorException- Если этот канал не был создан тем же поставщиком, что и данный селектор -
CancelledKeyException- Если этот канал в настоящее время зарегистрирован с данным селектором, но соответствующий ключ уже отменён -
IllegalArgumentException- Если бит в набореopsне соответствует операции, поддерживаемой этим каналом, то есть, еслиset & ~validOps() != 0
configureBlocking
public abstract SelectableChannel configureBlocking(boolean block) throws IOException
Если этот канал зарегистрирован с одним или несколькими селекторами, то попытка поместить его в режим блокировки вызовет IllegalBlockingModeException.
Этот метод может быть вызван в любое время. Новый режим блокировки повлияет только на операции ввода-вывода, начатые после возвращения этого метода. Для некоторых реализаций это может потребовать блокировки до завершения всех ожидающих операций ввода-вывода.
Если этот метод вызывается во время другого вызова этого метода или метода register, он сначала заблокируется до завершения другой операции.
- Параметры:
-
block- Еслиtrue, то этот канал будет помещен в режим блокировки; еслиfalse, то он будет помещен в режим без блокировки - Возвращает:
- Этот канал с выбором
- Исключения:
-
ClosedChannelException- Если этот канал закрыт -
IllegalBlockingModeException- Еслиblockравноtrueи этот канал зарегистрирован с одним или несколькими селекторами -
IOException- Если произошла ошибка ввода-вывода
isBlocking
public abstract boolean isBlocking()
Если этот канал закрыт, то возвращаемое значение этого метода не определено.
- Возвращает:
-
trueесли и только если этот канал находится в режиме блокировки
blockingLock
public abstract Object blockingLock()
configureBlocking и register. Это часто полезно в реализации адаптеров, которым требуется поддержание определенного режима блокировки на короткий период времени.- Возвращает:
- Объект блокировки режима
© 1993, 2023, 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/21/docs/api/java.base/java/nio/channels/SelectableChannel.html