- java.lang.Object
-
- java.nio.channels.AsynchronousChannelGroup
-
public abstract class AsynchronousChannelGroupextends Object
用于资源共享的一组异步通道。异步通道组封装了处理绑定到组的
asynchronous channels
启动的I / O操作完成所需的机制。 组具有关联的线程池,任务将提交到该线程池以处理I / O事件,并分派给completion-handlers
,该队列消耗对组中通道执行的异步操作的结果。 除了处理I / O事件之外,池化线程还可以执行支持异步I / O操作执行所需的其他任务。通过调用此处定义的
withFixedThreadPool
或withCachedThreadPool
方法创建异步通道组。 通过在构造通道时指定组,通道绑定到组。 关联的线程池由该组拥有 ; 终止组会导致关联的线程池关闭。除了显式创建的组之外,Java虚拟机还维护一个自动构建的系统范围的默认组 。 在构造时未指定组的异步通道将绑定到默认组。 默认组具有关联的线程池,可根据需要创建新线程。 可以通过下表中定义的系统属性配置默认组。 如果未配置默认组的
System properties System property DescriptionThreadFactory
,则默认组的池线程为daemon
个线程。java.nio.channels.DefaultThreadPool.threadFactory
The value of this property is taken to be the fully-qualified name of a concreteThreadFactory
class. The class is loaded using the system class loader and instantiated. The factory'snewThread
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 theinitialSize
parameter for the default group (seewithCachedThreadPool
). The value of the property is taken to be theString
representation of anInteger
that is the initial size parameter. If the value cannot be parsed as anInteger
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
方法shutdownNow
关闭组中的所有打开通道,就像调用close
方法一样。
-
-
构造方法摘要
构造方法 变量 构造器 描述 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)
创建具有给定线程池的异步通道组。
-
-
-
构造方法详细信息
-
AsynchronousChannelGroup
protected AsynchronousChannelGroup(AsynchronousChannelProvider provider)
初始化此类的新实例。- 参数
-
provider
- 该组的异步通道提供程序
-
-
方法详细信息
-
provider
public final AsynchronousChannelProvider provider()
返回创建此通道组的提供程序。- 结果
- 创建此通道组的提供程序
-
withFixedThreadPool
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错误
-
withCachedThreadPool
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()
-
withThreadPool
public static AsynchronousChannelGroup withThreadPool(ExecutorService executor) throws IOException
创建具有给定线程池的异步通道组。executor
参数是ExecutorService
,它执行提交的任务,以便为在组中的异步通道上启动的操作分派完成结果。配置执行程序服务时应小心。 它应该支持直接切换或提交任务的无限排队 ,并且调用
execute
方法的线程永远不应该直接调用任务。 实施可能要求额外的限制。执行程序仅由生成的异步通道组使用。 终止该组导致执行程序服务的有序
shutdown
。 通过其他方式关闭执行程序服务会导致未指定的行为。通过调用系统范围的默认
AsynchronousChannelProvider
对象的openAsynchronousChannelGroup(ExecutorService,int)
方法创建该组,其中initialSize
为0
。- 参数
-
executor
- 结果组的线程池 - 结果
- 一个新的异步通道组
- 异常
-
IOException
- 如果发生I / O错误
-
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
- 如果发生I / O错误
-
awaitTermination
public abstract boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException
等待小组终止。此方法将阻塞,直到组终止,或发生超时,或者当前线程被中断,以先发生者为准。
- 参数
-
timeout
- 等待的最长时间,或等待零或更少的最长时间 -
unit
- 超时参数的时间单位 - 结果
-
true
如果该团体已经终止;false
如果在终止之前超时 - 异常
-
InterruptedException
- 如果在等待时中断
-
-