Spec-Zone.ru › OpenJDK 21

Класс AsynchronousChannelGroup

java.lang.Object
java.nio.channels.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
См. также:
  • 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)
Создает группу асинхронных каналов с заданным пулом потоков.

Методы, объявленные в классе java.lang.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 - Если ожидание было прервано

© 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

Spec-Zone.ru

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