Класс 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 , представляющее начальный параметр размера. Если значение не может быть обработано как 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- единица измерения времени аргумента тайм-аута - Возвращает:
-
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.