Класс 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 |
Создает асинхронную группу каналов с заданным пулом потоков. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создает и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли этот объект другому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удален в одной из будущих версий. Финализация объявлена устаревшей и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или прерывания, либо до истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или прерывания, либо до истечения заданного промежутка реального времени. |
Подробное описание конструкторов
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.