Класс SelectorProvider
public abstract class SelectorProvider extends Object
Поставщик селекторов — это конкретный подкласс данного класса, имеющий конструктор без аргументов и реализующий указанные ниже абстрактные методы. Каждый запуск виртуальной машины Java поддерживает один экземпляр поставщика по умолчанию для всей системы, который возвращается методом provider. При первом вызове этого метода поставщик по умолчанию определяется описанным ниже способом.
Поставщик по умолчанию для всей системы используется статическими методами open классов DatagramChannel, Pipe, Selector, ServerSocketChannel и SocketChannel. Он также используется методом System.inheritedChannel(). Программа может использовать поставщика, отличного от поставщика по умолчанию: для этого нужно создать экземпляр такого поставщика и напрямую вызвать методы open, определённые в этом классе.
Все методы этого класса безопасны для использования несколькими одновременно работающими потоками.
- Начиная с:
- 1.4
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Инициализирует новый экземпляр этого класса. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Channel |
inheritedChannel() |
Возвращает канал, унаследованный от сущности, создавшей эту виртуальную машину Java. |
abstract DatagramChannel |
openDatagramChannel() |
Открывает канал дейтаграмм. |
abstract DatagramChannel |
openDatagramChannel |
Открывает канал дейтаграмм. |
abstract Pipe |
openPipe() |
Открывает канал. |
abstract AbstractSelector |
openSelector() |
Открывает селектор. |
abstract ServerSocketChannel |
openServerSocketChannel() |
Открывает канал серверного сокета. |
ServerSocketChannel |
openServerSocketChannel |
Открывает канал серверного сокета. |
abstract SocketChannel |
openSocketChannel() |
Открывает канал сокета. |
SocketChannel |
openSocketChannel |
Открывает канал сокета. |
static SelectorProvider |
provider() |
Возвращает поставщика селекторов по умолчанию для всей системы при данном запуске виртуальной машины Java. |
Подробное описание конструкторов
SelectorProvider
protected SelectorProvider()
Подробное описание методов
provider
public static SelectorProvider provider()
При первом вызове этого метода объект поставщика по умолчанию определяется следующим образом:
Если задано системное свойство
java.nio.channels.spi.SelectorProvider, оно считается полным именем конкретного класса поставщика. Класс загружается и создаётся его экземпляр; если этот процесс завершается неудачно, возникает ошибка неопределённого типа.Если класс поставщика установлен в JAR-файле, доступном системному загрузчику классов, и этот JAR-файл содержит файл конфигурации поставщика с именем
java.nio.channels.spi.SelectorProviderв каталоге ресурсовMETA-INF/services, используется первое указанное в этом файле имя класса. Класс загружается и создаётся его экземпляр; если этот процесс завершается неудачно, возникает ошибка неопределённого типа.Наконец, если поставщик не был указан ни одним из перечисленных выше способов, создаётся экземпляр класса поставщика по умолчанию для системы и возвращается результат.
При последующих вызовах этого метода возвращается поставщик, полученный при первом вызове.
- Возвращает:
- Поставщик селекторов по умолчанию для всей системы
openDatagramChannel
public abstract DatagramChannel openDatagramChannel() throws IOException
- Возвращает:
- Новый канал
- Выбрасывает:
-
IOException— если произошла ошибка ввода-вывода
openDatagramChannel
public abstract DatagramChannel openDatagramChannel(ProtocolFamily family) throws IOException
- Параметры:
-
family— семейство протоколов - Возвращает:
- Новый канал дейтаграмм
- Выбрасывает:
-
UnsupportedOperationException— если указанное семейство протоколов не поддерживается -
IOException— если произошла ошибка ввода-вывода - Начиная с:
- 1.7
openPipe
public abstract Pipe openPipe() throws IOException
- Возвращает:
- Новый канал
- Выбрасывает:
-
IOException— если произошла ошибка ввода-вывода
openSelector
public abstract AbstractSelector openSelector() throws IOException
- Возвращает:
- Новый селектор
- Выбрасывает:
-
IOException— если произошла ошибка ввода-вывода
openServerSocketChannel
public abstract ServerSocketChannel openServerSocketChannel() throws IOException
- Возвращает:
- Новый канал
- Выбрасывает:
-
IOException— если произошла ошибка ввода-вывода
openSocketChannel
public abstract SocketChannel openSocketChannel() throws IOException
- Возвращает:
- Новый канал
- Выбрасывает:
-
IOException— если произошла ошибка ввода-вывода
inheritedChannel
public Channel inheritedChannel() throws IOException
Во многих операционных системах процесс, например виртуальную машину Java, можно запустить так, чтобы он унаследовал канал от создавшей его сущности. Способ выполнения этой операции зависит от системы, как и возможные сущности, к которым может быть подключён канал. Например, в системах UNIX для запуска программ, обслуживающих запросы, поступающие на соответствующий сетевой порт, используется демон интернет-служб (inetd). В этом примере запускаемый процесс наследует канал, представляющий сетевой сокет.
Если унаследованный канал соответствует сокету интернет-протокола, тип Channel, возвращаемый этим методом, определяется следующим образом:
Если унаследованный канал соответствует подключённому сокету с потоковой передачей данных, возвращается
SocketChannel. Изначально канал сокета по крайней мере находится в блокирующем режиме, привязан к адресу сокета и подключён к узлу-партнёру.Если унаследованный канал соответствует прослушивающему сокету с потоковой передачей данных, возвращается
ServerSocketChannel. Изначально канал серверного сокета по крайней мере находится в блокирующем режиме и привязан к адресу сокета.Если унаследованный канал соответствует сокету для передачи дейтаграмм, возвращается
DatagramChannel. Изначально канал дейтаграмм по крайней мере находится в блокирующем режиме и привязан к адресу сокета.
Если унаследованный канал соответствует сокету домена Unix, возвращаемый тип Channel совпадает с типом для сокетов интернет-протокола, описанных выше, за исключением того, что сокеты для передачи дейтаграмм не поддерживаются.
Помимо двух описанных выше типов сокетов, в будущем этот метод может возвращать и другие типы.
При первом вызове этого метода создаётся возвращаемый канал. При последующих вызовах этого метода возвращается тот же канал.
- Требования к реализации:
- Реализация этого метода по умолчанию возвращает
null. - Возвращает:
- Унаследованный канал, если он есть, иначе
null. - Выбрасывает:
-
IOException— если произошла ошибка ввода-вывода - Начиная с:
- 1.5
openSocketChannel
public SocketChannel openSocketChannel(ProtocolFamily family) throws IOException
- Требования к реализации:
- Реализация этого метода по умолчанию сначала проверяет, что заданное семейство протоколов
familyне являетсяnull, а затем выбрасывает исключениеUnsupportedOperationException. - Параметры:
-
family— семейство протоколов - Возвращает:
- Новый канал
- Выбрасывает:
-
UnsupportedOperationException— если указанное семейство протоколов не поддерживается -
IOException— если произошла ошибка ввода-вывода - Начиная с:
- 15
openServerSocketChannel
public ServerSocketChannel openServerSocketChannel(ProtocolFamily family) throws IOException
- Требования к реализации:
- Реализация этого метода по умолчанию сначала проверяет, что заданное семейство протоколов
familyне являетсяnull, а затем выбрасывает исключениеUnsupportedOperationException. - Параметры:
-
family— семейство протоколов - Возвращает:
- Новый канал
- Выбрасывает:
-
UnsupportedOperationException— если указанное семейство протоколов не поддерживается -
IOException— если произошла ошибка ввода-вывода - Начиная с:
- 15
© 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/SelectorProvider.html