public abstract class AsynchronousChannelGroup extends Object
异步通道组封装了处理绑定到组的asynchronous channels
发起的I / O操作完成所需的机制 。 一个组具有相关联的线程池,任务被提交到该处理I / O事件并发送到completion-handlers
,消耗在组中的通道上执行的异步操作的结果。 除了处理I / O事件之外,汇集的线程还可以执行支持执行异步I / O操作所需的其他任务。
通过调用这里定义的withFixedThreadPool
或withCachedThreadPool
方法创建异步通道组。 通道在构建通道时通过指定组来绑定到一个组。 相关联的线程池由组拥有 ; 组的终止导致关联线程池的关闭。
除了明确创建的组之外,Java虚拟机还会维护自动构建的系统范围的默认组 。 在构建时不指定组的异步通道绑定到默认组。 默认组具有相关联的线程池,根据需要创建新线程。 默认组可以通过下表中定义的系统属性进行配置。 凡ThreadFactory
默认组未再配置缺省组的池线程是daemon
个线程。
java.nio.channels.DefaultThreadPool.threadFactory
The value of this property is taken to be the fully-qualified name of a concrete ThreadFactory
class. The class is loaded using the system class loader and instantiated. The factory's newThread
method is invoked to create each thread for the default group's thread pool. If the process to load and instantiate the value of the property fails then an unspecified error is thrown during the construction of the default group. java.nio.channels.DefaultThreadPool.initialSize
The value of the initialSize
parameter for the default group (see withCachedThreadPool
). The value of the property is taken to be the String
representation of an Integer
that is the initial size parameter. If the value cannot be parsed as an Integer
it causes an unspecified error to be thrown during the construction of the default group.
在绑定到组的通道上启动的I / O操作的完成处理程序将被保证由组中的一个合并线程调用。 这确保完成处理程序由具有预期标识的线程运行。
在I / O操作立即完成的情况下,启动线程是组中的一个汇集线程,那么完成处理程序可能会被启动线程直接调用。 为了避免堆栈溢出,实现可能会对线程堆栈上的激活次数施加限制。 一些I / O操作可能会禁止直接由启动线程调用完成处理程序(请参阅accept
)。
shutdown
方法用于启动组的有序关闭 。 有序关闭将该组标记为关机; 进一步尝试构建与该组绑定的通道将会抛出ShutdownChannelGroupException
。 一个组是否关机可以使用isShutdown
方法进行测试。 一旦关闭,组结束时被绑定到该组的所有异步通道关闭,所有正在执行的完成处理程序已运行到完成,并通过该组使用的资源被释放。 没有尝试停止或中断执行完成处理程序的线程。 isTerminated
方法用于测试组是否已经终止,并且可以使用awaitTermination
方法来阻止该组终止。
shutdownNow
方法可用于启动组的强制关闭 。 除了通过有序关闭执行的操作外, shutdownNow
方法将关闭组中的所有打开通道,就像调用close
方法一样。
Modifier | Constructor and Description |
---|---|
protected |
AsynchronousChannelGroup(AsynchronousChannelProvider provider)
初始化此类的新实例。
|
Modifier and Type | Method and Description |
---|---|
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)
使用给定的线程池创建异步通道组。
|
protected AsynchronousChannelGroup(AsynchronousChannelProvider provider)
provider
- 此组的异步通道提供程序
public final AsynchronousChannelProvider provider()
public static AsynchronousChannelGroup withFixedThreadPool(int nThreads, ThreadFactory threadFactory) throws IOException
所产生的异步通道组重新使用固定数量的线程。 在任何时候,最多nThreads
个线程将是被提交处理I / O事件的主动处理任务,并且为组中异步通道发起的操作发送完成结果。
该组是通过调用系统范围默认的AsynchronousChannelProvider
对象的openAsynchronousChannelGroup(int,ThreadFactory)
方法创建的。
nThreads
- 池中的线程数
threadFactory
- 创建新线程时使用的工厂
IllegalArgumentException
- 如果
nThreads <= 0
IOException
- 如果发生I / O错误
public static AsynchronousChannelGroup withCachedThreadPool(ExecutorService executor, int initialSize) throws IOException
executor
参数是ExecutorService
,根据需要创建新线程,以执行提交以处理I / O事件的任务,并为组中的异步通道启动的操作分派完成结果。 当它们可用时,它可以重用以前构造的线程。
该initialSize
参数可以通过实施作为提示被用作它可以提交任务的初始数量。 例如,它可以用于指示等待I / O事件的初始线程数。
执行器意图由所产生的异步通道组专门使用。 该组的终止导致执行者服务有序shutdown
。 以其他方式关闭执行者服务会导致未指定的行为。
该组是通过调用系统范围默认的AsynchronousChannelProvider
对象的openAsynchronousChannelGroup(ExecutorService,int)
方法创建的。
executor
- 生成组的线程池
initialSize
- 值为
>=0
或实现特定默认值的负值
IOException
- 如果发生I / O错误
Executors.newCachedThreadPool()
public static AsynchronousChannelGroup withThreadPool(ExecutorService executor) throws IOException
executor
参数是一个ExecutorService
,执行提交的任务,以便为组中的异步通道启动的操作发送完成结果。
配置执行程序服务时应小心。 它应该支持直接切换或提交的任务的无限排队 ,并且调用execute
方法的线程不应该直接调用该任务。 一个实施可能需要额外的限制。
执行器意图由所产生的异步通道组专门使用。 该组的终止导致执行者服务的有序shutdown
。 以其他方式关闭执行者服务会导致未指定的行为。
该组是通过调用系统范围的默认AsynchronousChannelProvider
对象的88416798242410方法创建的, initialSize
为0
。
executor
- 生成组的线程池
IOException
- 如果发生I / O错误
public abstract boolean isShutdown()
true
如果此异步通道组已关闭或已标记为关闭。
public abstract boolean isTerminated()
在这种方法返回true
,相关联的线程池也有terminated
。
true
如果该组已经终止
public abstract void shutdown()
此方法将该组标记为关闭。 进一步尝试构建与此组绑定的通道将抛出ShutdownChannelGroupException
。 当组中的所有异步通道关闭时,组终止,所有主动执行的完成处理程序都已完成运行,并且所有资源都已被释放。 如果组已经关闭,则此方法无效。
public abstract void shutdownNow() throws IOException
除了shutdown
方法执行的操作之外,该方法还会在组中的所有打开的通道上调用close
方法。 该方法不会阻止或中断执行完成处理程序的线程。 当所有主动执行的完成处理程序都运行到完成并且所有资源已经被释放时,该组终止。 可以随时调用此方法。 如果一些其他线程已经调用它,那么另一个调用将阻塞,直到第一次调用完成,之后它将不起作用。
IOException
- 如果发生I / O错误
public abstract boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException
该方法阻塞,直到组终止,或超时发生,或当前线程中断,以先发生者为准。
timeout
- 等待的最长时间,或零或更少等待不等待
unit
- 超时参数的时间单位
true
如果该组已经终止;
false
如果在终止之前超时
InterruptedException
- 等待时中断