Класс 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.
- Начиная с:
- 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— Единица измерения аргумента времени ожидания - Возвращает:
-
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://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/nio/channels/AsynchronousChannelGroup.html