Класс AsynchronousChannelGroup
public abstract class AsynchronousChannelGroup extends Object
Группа асинхронных каналов инкапсулирует механизмы, необходимые для обработки завершения операций ввода-вывода, инициированных asynchronous channels, которые привязаны к группе. Группа имеет связанный пул потоков, в который отправляются задачи для обработки событий ввода-вывода и распределения completion-handlers, которые потребляют результат асинхронных операций, выполненных на каналах в группе. Помимо обработки событий ввода-вывода, пулевые потоки могут также выполнять другие задачи, необходимые для поддержки выполнения асинхронных операций ввода-вывода.
Группа асинхронных каналов создается путем вызова методов withFixedThreadPool или withCachedThreadPool. Каналы привязываются к группе, указав группу при построении канала. Связанный пул потоков принадлежит группе; завершение группы приводит к закрытию связанного пула потоков.
Помимо явно созданных групп, виртуальная машина Java поддерживает группу по умолчанию, которая создается автоматически. Асинхронные каналы, которые не указывают группу при создании, привязываются к группе по умолчанию. Группа по умолчанию имеет связанный пул потоков, который создает новые потоки по мере необходимости. Группу по умолчанию можно настроить с помощью системных свойств, определенных в таблице ниже. Если ThreadFactory для группы по умолчанию не настроен, то пулевые потоки группы по умолчанию являются потоками daemon.
| Системное свойство | Описание |
|---|---|
java.nio.channels.DefaultThreadPool.threadFactory | Значение этого свойства принимается как полное квалифицированное имя конкретного класса ThreadFactory. Класс загружается с помощью загрузчика классов системы и инициализируется. Метод фабрики newThread вызывается для создания каждого потока для пула потоков группы по умолчанию. Если процесс загрузки и инициализации значения свойства завершается неудачно, при создании группы по умолчанию выбрасывается неопределенная ошибка. |
java.nio.channels.DefaultThreadPool.initialSize | Значение параметра initialSize для группы по умолчанию (см. withCachedThreadPool). Значение свойства принимается как String представление Integer, которое является начальным параметром размера. Если значение не может быть обработано как Integer, при создании группы по умолчанию будет выброшена неопределенная ошибка. |
Потоки
Обработчик завершения операции ввода-вывода, инициированной на канале, привязанном к группе, гарантированно будет вызван одним из пулевых потоков в группе. Это гарантирует, что обработчик завершения будет запущен потоком с ожидаемой идентичностью.
Если операция ввода-вывода завершается немедленно, и инициирующий поток является одним из пулевых потоков в группе, то обработчик завершения может быть вызван непосредственно инициирующим потоком. Для предотвращения переполнения стека реализация может установить ограничение на количество активаций в стеке потока. Некоторые операции ввода-вывода могут запрещать вызов обработчика завершения непосредственно инициирующим потоком (см. accept).
Закрытие и завершение
Метод shutdown используется для инициирования порядочного закрытия группы. Порядочное закрытие отмечает группу как закрытую; дальнейшие попытки создать канал, который привязывается к группе, вызовут ShutdownChannelGroupException. Можно проверить закрыта ли группа, используя метод isShutdown. После закрытия группа завершается, когда все асинхронные каналы, привязанные к группе, закрыты, все активно выполняющиеся обработчики завершения завершены, и ресурсы, используемые группой, освобождены. Не предпринимается попытка остановить или прервать потоки, которые выполняют обработчики завершения. Метод isTerminated используется для проверки, завершена ли группа, а метод awaitTermination может использоваться для ожидания завершения группы.
Метод shutdownNow может быть использован для инициирования принудительного закрытия группы. В дополнение к действиям, выполняемым при порядочном закрытии, метод shutdownNow закрывает все открытые каналы в группе, как если бы был вызван метод close.
- Since:
- 1.7
- См. также:
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Инициализирует новый экземпляр этого класса. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract boolean |
awaitTermination |
Ожидает завершения группы. |
abstract boolean |
isShutdown() |
Указывает, закрыта ли эта группа асинхронных каналов. |
abstract boolean |
isTerminated() |
Указывает, завершена ли эта группа. |
final AsynchronousChannelProvider |
provider() |
Возвращает поставщика, который создал эту группу каналов. |
abstract void |
shutdown() |
Инициирует порядочное закрытие группы. |
abstract void |
shutdownNow() |
Закрывает группу и закрывает все открытые каналы в группе. |
static AsynchronousChannelGroup |
withCachedThreadPool |
Создаёт группу асинхронных каналов с заданным пулом потоков, создающим новые потоки по мере необходимости. |
static AsynchronousChannelGroup |
withFixedThreadPool |
Создаёт группу асинхронных каналов с фиксированным пулом потоков. |
static AsynchronousChannelGroup |
withThreadPool |
Создаёт группу асинхронных каналов с заданным пулом потоков. |
Подробное описание конструкторов
AsynchronousChannelGroup
protected AsynchronousChannelGroup(AsynchronousChannelProvider provider)
- Параметры:
-
provider- Предоставление асинхронного канала для этой группы
Подробное описание методов
provider
public final AsynchronousChannelProvider provider()
- Возвращает:
- Предоставление, которое создало эту группу каналов
withFixedThreadPool
public static AsynchronousChannelGroup withFixedThreadPool(int nThreads, ThreadFactory threadFactory) throws IOException
Результирующая группа асинхронных каналов повторно использует фиксированное количество потоков. В любой момент времени не более nThreads потоков будут активны в обработке задач, которые переданы для обработки событий ввода-вывода и отправки результатов завершения для операций, инициированных на асинхронных каналах в группе.
Группа создаётся вызовом метода openAsynchronousChannelGroup(int,ThreadFactory) системного по умолчанию AsynchronousChannelProvider объекта.
- Параметры:
-
nThreads- Количество потоков в пуле -
threadFactory- Фабрика, используемая при создании новых потоков - Возвращает:
- Новая группа асинхронных каналов
- Исключение:
-
IllegalArgumentException- ЕслиnThreads <= 0 -
IOException- Если возникает ошибка ввода-вывода
withCachedThreadPool
public static AsynchronousChannelGroup withCachedThreadPool(ExecutorService executor, int initialSize) throws IOException
Параметр executor — это ExecutorService, который создаёт новые потоки по мере необходимости для выполнения задач, которые отправляются для обработки событий ввода-вывода и отправки результатов завершения для операций, инициированных на асинхронных каналах в группе. Он может повторно использовать ранее созданные потоки, если они доступны.
Параметр initialSize может использоваться реализацией как подсказка о начальном количестве задач, которое он может передать. Например, он может использоваться для указания начального числа потоков, которые ожидают событий ввода-вывода.
Исполнитель предназначен для использования исключительно результатом асинхронной группой каналов. Завершение группы приводит к упорядоченному shutdown сервиса выполнения задач. Выключение сервиса выполнения задач другими способами приводит к неопределённому поведению.
Группа создаётся вызовом метода openAsynchronousChannelGroup(ExecutorService,int) системного по умолчанию AsynchronousChannelProvider объекта.
- Параметры:
-
executor- Пул потоков для результирующей группы -
initialSize- Значение>=0или отрицательное значение для реализации, специфичного по умолчанию - Возвращает:
- Новая группа асинхронных каналов
- Исключение:
-
IOException- Если возникает ошибка ввода-вывода - См. также:
withThreadPool
public static AsynchronousChannelGroup withThreadPool(ExecutorService executor) throws IOException
Параметр executor — это ExecutorService, который выполняет задачи, переданные для отправки результатов завершения для операций, инициированных на асинхронных каналах в группе.
Следует проявлять осторожность при настройке сервиса выполнения задач. Он должен поддерживать непосредственную передачу или неограниченное очередирование переданных задач, и поток, который вызывает метод execute, никогда не должен вызывать задачу напрямую. Реализация может предписывать дополнительные ограничения.
Исполнитель предназначен для использования исключительно результатом асинхронной группой каналов. Завершение группы приводит к упорядоченному shutdown сервиса выполнения задач. Выключение сервиса выполнения задач другими способами приводит к неопределённому поведению.
Группа создаётся вызовом метода openAsynchronousChannelGroup(ExecutorService,int) системного по умолчанию AsynchronousChannelProvider объекта с
initialSize 0.
- Параметры:
-
executor- Пул потоков для результирующей группы - Возвращает:
- Новая группа асинхронных каналов
- Исключение:
-
IOException- Если возникает ошибка ввода-вывода
isShutdown
public abstract boolean isShutdown()
- Возвращает:
-
trueесли эта группа асинхронных каналов остановлена или отмечена для остановки.
isTerminated
public abstract boolean isTerminated()
Если этот метод возвращает true, то связанный пул потоков также terminated.
- Возвращает:
-
trueесли эта группа завершена
shutdown
public abstract void shutdown()
Этот метод помечает группу как завершённую. Дальнейшие попытки создать канал, связанный с этой группой, вызовут ShutdownChannelGroupException. Группа завершается, когда все асинхронные каналы в группе закрыты, все активно выполняющиеся обработчики завершения завершены и все ресурсы освобождены. Этот метод не имеет эффекта, если группа уже остановлена.
shutdownNow
public abstract void shutdownNow() throws IOException
Кроме действий, выполняемых методом shutdown, этот метод вызывает метод close для всех открытых каналов в группе. Этот метод не пытается остановить или прервать потоки, которые выполняют обработчики завершения. Группа завершается, когда все активно выполняющиеся обработчики завершения завершены и все ресурсы освобождены. Этот метод может быть вызван в любое время. Если какой-либо другой поток уже вызвал его, то другой вызов будет блокироваться до завершения первого вызова, после чего он вернётся без эффекта.
- Исключение:
-
IOException- Если возникает ошибка ввода-вывода
awaitTermination
public abstract boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException
Этот метод блокируется до завершения группы или истечения времени ожидания или прерывания текущего потока, в зависимости от того, что произойдёт первым.
- Параметры:
-
timeout- Максимальное время ожидания, или ноль или меньше, чтобы не ждать -
unit- Единица измерения времени параметра timeout - Возвращает:
-
true, если группа завершена;falseесли истекло время ожидания до завершения - Исключение:
-
InterruptedException- Если ожидание прервано
© 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/AsynchronousChannelGroup.html