Spec-Zone.ru › OpenJDK 8

Класс 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.

Spec-Zone.ru

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