Класс SelectableChannel
- Все реализованные интерфейсы:
-
Closeable,AutoCloseable,Channel,InterruptibleChannel
- Непосредственные известные подклассы:
AbstractSelectableChannel
public abstract class SelectableChannel extends AbstractInterruptibleChannel implements Channel
Selector. Для использования с селектором экземпляр этого класса должен быть предварительно зарегистрирован с помощью метода register. Этот метод возвращает новый объект SelectionKey, представляющий регистрацию канала с селектором.
После регистрации с селектором канал остается зарегистрированным до его дерегистрации. Это включает в себя освобождение ресурсов, выделенных каналу селектором.
Канал не может быть дерегистрирован напрямую; вместо этого ключ, представляющий его регистрацию, должен быть отменён. Отмена ключа запрашивает deregistratsiyu канала во время следующей операции выбора селектора. Ключ может быть отменен явно, вызвав его метод cancel. Все ключи канала отменяются неявно при закрытии канала, либо вызовом его метода close, либо прерыванием потока, заблокированного в операции ввода-вывода по каналу.
Если сам селектор закрыт, канал будет дерегистрирован, а ключ, представляющий его регистрацию, будет проигнорирован без дальнейших задержек.
Канал может быть зарегистрирован не более одного раза с любым конкретным селектором.
Регистрация канала с одним или несколькими селекторами может быть определена вызовом метода isRegistered.
Каналы Selectable безопасны для использования в нескольких потоках одновременно.
Режим блокировки
Каналы Selectable находятся либо в режиме блокировки, либо в режиме неблокировки. В режиме блокировки каждая операция ввода-вывода, вызванная на канале, будет заблокирована до завершения. В режиме неблокировки операция ввода-вывода никогда не будет заблокирована и может передать меньше байтов, чем было запрошено, или вообще не передать байтов. Режим блокировки канала Selectable может быть определен вызовом методаisBlocking. Новосозданные каналы Selectable всегда находятся в режиме блокировки. Режим неблокировки наиболее полезен в сочетании с мультиплексированием на основе селекторов. Канал должен быть переведён в режим неблокировки перед регистрацией с селектором, и не может быть возвращен в режим блокировки до того, как он будет дерегистрирован.
- С:
- 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, 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/SelectableChannel.html