モジュール java.base
パッケージ java.nio.channels

クラスAsynchronousChannelGroup

java.lang.Object
java.nio.channels.AsynchronousChannelGroup

public abstract class AsynchronousChannelGroup extends Object
リソースを共有するための非同期チャネルのグループ化です。

非同期チャネル・グループは、グループにバインドされたasynchronous channelsによって開始された入出力操作の完了を処理するために必要な機構をカプセル化します。 グループには、グループ内のチャネルで実行される非同期操作の結果を消費する入出力イベントを処理して、completion-handlersにディスパッチするための、タスクの送信先に関連するスレッド・プールがあります。 プールされたスレッドは、入出力イベントの処理に加えて、非同期入出力操作の実行をサポートするために必要なその他のタスクを実行することもあります。

非同期チャネル・グループは、ここで定義されたwithFixedThreadPoolメソッドまたはwithCachedThreadPoolメソッドを呼び出すことで作成されます。 チャネルは、チャネルの構築時にグループを指定することでグループにバインドされます。 関連するスレッド・プールは、グループによって所有されます。グループを終了すると、関連するスレッド・プールがシャットダウンされます。

Java仮想マシンは、明示的に作成されたグループのほかに、自動的に構築されるシステム全体のデフォルト・グループを維持します。 構築時にグループを指定しない非同期チャネルは、デフォルト・グループにバインドされます。 デフォルト・グループには、必要に応じて新しいスレッドを作成する、関連するスレッド・プールがあります。 デフォルト・グループは、次の表で定義されているシステム・プロパティを使用して構成されることがあります。 デフォルト・グループのThreadFactoryが構成されない場合、デフォルト・グループのプールされたスレッドはdaemonスレッドです。

システム・プロパティ
システム・プロパティ 説明
java.nio.channels.DefaultThreadPool.threadFactory このプロパティの値は、具象ThreadFactoryクラスの完全修飾名になります。 クラスは、システム・クラス・ローダーを使用してロードされ、インスタンス化されます。 デフォルト・グループのスレッド・プールの各スレッドを作成するために、ファクトリのnewThreadメソッドが呼び出されます。 プロパティの値をロードしてインスタンス化するためのプロセスが失敗した場合、デフォルト・グループの構築中に未指定のエラーがスローされます。
java.nio.channels.DefaultThreadPool.initialSize デフォルト・グループのinitialSizeパラメータの値(withCachedThreadPoolを参照)。 プロパティの値は、初期サイズ・パラメータであるIntegerString表現になります。 値をIntegerとして解析できない場合、デフォルト・グループの構築中に未指定のエラーがスローされます。

スレッド

グループにバインドされたチャネルで開始された入出力操作の終了ハンドラは、グループ内のプールされたスレッドの1つによって呼び出されることが保証されます。 これによって、終了ハンドラは必ず、予期されるIDを持つスレッドによって実行されます。

入出力操作がただちに終了し、開始スレッドがグループ内のプールされたスレッドの1つである場合、終了ハンドラは開始スレッドによって直接呼び出されることがあります。 スタック・オーバーフローを回避するために、実装によっては、スレッド・スタックでの起動の数に関する制限が適用される場合があります。 一部の入出力操作では、開始スレッドによって終了ハンドラを直接呼び出すことは禁止されていることがあります(acceptを参照)。

シャットダウンおよび終了

shutdownメソッドは、グループの正しい順序でのシャットダウンを開始するために使用されます。 正しい順序でのシャットダウンによって、グループはシャットダウンとしてマークされ、グループにバインドするチャネルをさらに構築しようとすると、ShutdownChannelGroupExceptionがスローされます。 グループがシャットダウンされるかどうかは、isShutdownメソッドを使用してテストできます。 シャットダウン後に、グループにバインドされたすべての非同期チャネルがクローズされ、アクティブに実行中のすべての終了ハンドラの実行が終了し、グループによって使用されていたリソースが解放されると、グループは終了します 実行ハンドラを実行しているスレッドの停止または割込みは試行されません。 グループが終了したかどうかをテストするためにisTerminatedメソッドが使用され、awaitTerminationメソッドを使用して、グループが終了するまでブロックすることができます。

shutdownNowメソッドを使用して、グループの強制的なシャットダウンを開始することができます。 shutdownNowメソッドは、正しい順序でのシャットダウンによって実行されるアクションのほかに、closeメソッドを呼び出す場合と同じようにグループ内の開いているチャネルをすべて閉じます。

導入されたバージョン:
1.7
関連項目: