Класс 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). Значение свойства является строковым представлением Integer параметра начального размера. Если значение не может быть обработано как целое число, выбрасывается неопределенная ошибка при создании группы по умолчанию. |
Потоки
Обработчик завершения операции ввода-вывода, инициированной на канале, привязанном к группе, гарантированно будет вызван одним из потоков в пуле этой группы. Это гарантирует, что обработчик завершения выполняется потоком с ожидаемой идентичностью.
Если операция ввода-вывода завершается немедленно, а инициализирующий поток является одним из потоков в пуле группы, то обработчик завершения может быть вызван непосредственно инициализирующим потоком. Чтобы избежать переполнения стека, реализация может установить ограничение на количество активаций в стеке потока. Некоторые операции ввода-вывода могут запрещать вызов обработчика завершения непосредственно инициализирующим потоком (см. accept).
Завершение и прекращение работы
Метод shutdown используется для инициирования упорядоченного завершения работы группы. Упорядоченное завершение помечает группу как завершающуюся; дальнейшие попытки создать канал, который привязывается к группе, вызовут ShutdownChannelGroupException. Можно ли проверить, завершена ли группа, используя метод isShutdown. После завершения, группа прекращает свою работу, когда все асинхронные каналы, привязанные к группе, закрыты, все активно выполняющиеся обработчики завершения завершены, и ресурсы, используемые группой, освобождены. Не предпринимается никаких попыток остановить или прервать потоки, выполняющие обработчики завершения. Метод isTerminated используется для проверки, прекратила ли группа свою работу, а метод awaitTermination может использоваться для ожидания завершения работы группы.
Метод shutdownNow может быть использован для инициирования принудительного завершения группы. В дополнение к действиям, выполняемым при упорядоченном завершении, метод shutdownNow закрывает все открытые каналы в группе, как если бы был вызван метод close.
- С момента:
- 1.7
- См. также:
-
AsynchronousSocketChannel.open(AsynchronousChannelGroup),AsynchronousServerSocketChannel.open(AsynchronousChannelGroup)
Конструкторы
| Модификатор | Конструктор | Описание |
|---|---|---|
protected | AsynchronousChannelGroup(AsynchronousChannelProvider provider) | Инициализирует новый экземпляр этого класса. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract boolean | awaitTermination(long timeout,
TimeUnit unit) | Ожидает завершения работы группы. |
abstract boolean | isShutdown() | Указывает, завершена ли эта группа асинхронных каналов. |
abstract boolean | isTerminated() | Указывает, завершена ли эта группа. |
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- Единица измерения времени аргумента timeout - Возвращает:
-
trueесли группа завершила работу;falseесли время ожидания истекло до завершения - Исключения:
-
InterruptedException- Если поток прерван во время ожидания
© 1993, 2020, 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/11/docs/api/java.base/java/nio/channels/AsynchronousChannelGroup.html