Класс SelectableChannel
- Все реализованные интерфейсы:
-
Closeable,AutoCloseable,Channel,InterruptibleChannel
- Прямые известные подклассы:
AbstractSelectableChannel
public abstract class SelectableChannel extends AbstractInterruptibleChannel implements Channel
Selector. Для использования с селектором экземпляр этого класса должен быть предварительно зарегистрирован с помощью метода register. Этот метод возвращает новый объект SelectionKey, представляющий регистрацию канала с селектором.
После регистрации с селектором канал остаётся зарегистрированным до его дерегистрации. Это подразумевает освобождение ресурсов, выделенных каналу селектором.
Канал не может быть дерегистрирован напрямую; вместо этого ключ, представляющий его регистрацию, должен быть отменён. Отмена ключа запрашивает де регистрацию канала во время следующей операции выбора селектора. Ключ может быть отменён явно вызовом его метода 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, 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/nio/channels/SelectableChannel.html