Spec-Zone.ru › OpenJDK 27

Класс 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
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли этот объект другому объекту.
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(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или прерывания, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова 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 — если произошла ошибка ввода-вывода
См. также:
  • 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, 2026, 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.

Spec-Zone.ru

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