Класс AsynchronousChannelGroup
public abstract class AsynchronousChannelGroup extends Object
Группа асинхронных каналов encapsulates механизмы, необходимые для обработки завершения операций ввода-вывода, инициированных asynchronous channels, привязанных к группе. Группа имеет связанный пул потоков, в который отправляются задачи для обработки событий ввода-вывода и отправки обработчикам завершения completion-handlers, которые потребляют результаты асинхронных операций, выполняемых на каналах в группе. В дополнение к обработке событий ввода-вывода, потоки пула могут также выполнять другие задачи, необходимые для поддержки выполнения асинхронных операций ввода-вывода.
Группа асинхронных каналов создается путем вызова методов withFixedThreadPool или withCachedThreadPool, определенных здесь. Каналы привязываются к группе, указав группу при создании канала. Связанный пул потоков принадлежит группе; завершение работы группы приводит к завершению работы связанного пула потоков.
В дополнение к явно созданным группам, виртуальная машина Java поддерживает системную группу по умолчанию, которая создается автоматически. Асинхронные каналы, которые не указывают группу при создании, привязываются к группе по умолчанию. Группа по умолчанию имеет связанный пул потоков, который создает новые потоки по мере необходимости. Группу по умолчанию можно настроить с помощью системных свойств, определенных в таблице ниже. Если ThreadFactory для группы по умолчанию не настроен, то потоки пула группы по умолчанию являются daemon потоками.
| Системное свойство | Описание |
|---|---|
java.nio.channels.DefaultThreadPool.threadFactory | Значение этого свойства рассматривается как полное имя конкретного класса ThreadFactory. Класс загружается с помощью загрузчика системного класса и создается. Метод фабрики newThread вызывается для создания каждого потока для пула потоков группы по умолчанию. Если процесс загрузки и создания значения свойства терпит неудачу, то при создании группы по умолчанию возникает неопределенная ошибка. |
java.nio.channels.DefaultThreadPool.initialSize | Значение параметра initialSize для группы по умолчанию (см. withCachedThreadPool). Значение свойства рассматривается как строковое представление String целого числа, которое является начальным параметром размера. Если значение нельзя разобрать как целое число, при создании группы по умолчанию возникает неопределенная ошибка. |
Потоки
Обработчик завершения операции ввода-вывода, инициированной на канале, привязанном к группе, гарантированно вызывается одним из потоков пула в группе. Это гарантирует, что обработчик завершения выполняется потоком с ожидаемой идентичностью.
В случае, когда операция ввода-вывода завершается немедленно, и инициирующий поток является одним из потоков пула в группе, то обработчик завершения может быть вызван непосредственно инициирующим потоком. Для предотвращения переполнения стека реализация может установить ограничение на количество активаций в стеке потока. Некоторые операции ввода-вывода могут запрещать вызов обработчика завершения непосредственно инициирующим потоком (см. 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, 2023, 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/21/docs/api/java.base/java/nio/channels/AsynchronousChannelGroup.html