- java.lang.Object
-
- java.nio.channels.AsynchronousChannelGroup
-
public abstract class AsynchronousChannelGroup extends 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
方法会关闭组中的所有打开的通道,就像通过调用close
方法一样。
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protected
AsynchronousChannelGroup(AsynchronousChannelProvider provider)
初始化此类的新实例。
-
方法摘要
所有方法 静态方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 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
,它执行提交到ExecutorService
完成结果的任务,用于在组中的异步通道上启动的操作。配置执行程序服务时应小心。 它应该支持直接切换或提交的任务的无限排队 ,并且调用
execute
方法的线程不应该直接调用该任务。 一个实施可能需要额外的限制。执行器意图由所产生的异步通道组专门使用。 该组的终止导致执行者服务的有序
shutdown
。 以其他方式关闭执行者服务会导致未指定的行为。该组通过使用0的initialSize调用系统范围默认的
AsynchronousChannelProvider
对象的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
- 如果在等待时中断
-
-