Spec-Zone.ru › OpenJDK 25

Класс AsynchronousChannelGroup

java.lang.Object
java.nio.channels.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
См. также:
  • AsynchronousSocketChannel.open(AsynchronousChannelGroup)
  • AsynchronousServerSocketChannel.open(AsynchronousChannelGroup)

Краткое описание конструкторов

AsynchronousChannelGroup(AsynchronousChannelProvider provider)
Модификатор Конструктор Описание
protected
Инициализирует новый экземпляр этого класса.

Краткое описание методов

Модификатор и тип Метод Описание
abstract boolean awaitTermination(long timeout, TimeUnit unit)
Ожидает завершения группы.
abstract boolean isShutdown()
Сообщает, остановлена ли эта группа асинхронных каналов.
abstract boolean isTerminated()
Сообщает, завершила ли эта группа работу.
final AsynchronousChannelProvider provider()
Возвращает провайдер, создавший эту группу каналов.
abstract void shutdown()
Начинает штатную остановку группы.
abstract void shutdownNow()
Останавливает группу и закрывает все открытые каналы в ней.
static AsynchronousChannelGroup withCachedThreadPool(ExecutorService executor, int initialSize)
Создает группу асинхронных каналов с заданным пулом потоков, который создает новые потоки по мере необходимости.
static AsynchronousChannelGroup withFixedThreadPool(int nThreads, ThreadFactory threadFactory)
Создает группу асинхронных каналов с фиксированным пулом потоков.
static AsynchronousChannelGroup withThreadPool(ExecutorService executor)
Создает группу асинхронных каналов с заданным пулом потоков.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание конструкторов

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 — Если произошла ошибка ввода-вывода
См. также:
  • Executors.newCachedThreadPool()

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 — Если ожидание было прервано

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API