Spec-Zone.ru › OpenJDK 17

Класс 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). Значение свойства принимается в виде строкового представления Integer — параметр начального размера. Если значение нельзя разобрать как Integer, при создании группы по умолчанию выбрасывается неопределенная ошибка.

Потоки

Обработчик завершения операции ввода-вывода, инициированной на канале, привязанном к группе, гарантированно вызывается одним из потоков в пуле группы. Это гарантирует, что обработчик завершения выполняется потоком с ожидаемой идентичностью.

Если операция ввода-вывода завершается немедленно, а инициирующий поток является одним из потоков в пуле группы, то обработчик завершения может вызываться непосредственно инициирующим потоком. Для предотвращения переполнения стека реализация может установить ограничение на количество активаций в стеке потока. Некоторые операции ввода-вывода могут запрещать прямой вызов обработчика завершения инициирующим потоком (см. accept).

Завершение и терминация

Метод shutdown используется для инициирования упорядоченного завершения группы. Упорядоченное завершение помечает группу как завершенную; дальнейшие попытки создать канал, который привязывается к группе, приведут к выбрасыванию ShutdownChannelGroupException. Можно проверить, завершена ли группа, используя метод isShutdown. После завершения группа завершается, когда все асинхронные каналы, привязанные к группе, закрыты, все активные обработчики завершения завершили выполнение, и ресурсы, используемые группой, освобождены. Не предпринимается попыток остановить или прервать потоки, выполняющие обработчики завершения. Метод isTerminated используется для проверки того, завершена ли группа, а метод awaitTermination можно использовать для ожидания завершения группы.

Метод shutdownNow можно использовать для инициирования принудительного завершения группы. В дополнение к действиям, выполняемым при упорядоченном завершении, метод shutdownNow закрывает все открытые каналы в группе так, как если бы был вызван метод close.

Since:
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, 2021, 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/17/docs/api/java.base/java/nio/channels/AsynchronousChannelGroup.html

Spec-Zone.ru

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