クラスAsynchronousChannelGroup
非同期チャネル・グループは、グループにバインドされたasynchronous channelsによって開始された入出力操作の完了を処理するために必要な機構をカプセル化します。 グループには、グループ内のチャネルで実行される非同期操作の結果を消費する入出力イベントを処理して、completion-handlersにディスパッチするための、タスクの送信先に関連するスレッド・プールがあります。 プールされたスレッドは、入出力イベントの処理に加えて、非同期入出力操作の実行をサポートするために必要なその他のタスクを実行することもあります。
非同期チャネル・グループは、ここで定義されたwithFixedThreadPoolメソッドまたはwithCachedThreadPoolメソッドを呼び出すことで作成されます。 チャネルは、チャネルの構築時にグループを指定することでグループにバインドされます。 関連するスレッド・プールは、グループによって所有されます。グループを終了すると、関連するスレッド・プールがシャットダウンされます。
Java仮想マシンは、明示的に作成されたグループのほかに、自動的に構築されるシステム全体のデフォルト・グループを維持します。 構築時にグループを指定しない非同期チャネルは、デフォルト・グループにバインドされます。 デフォルト・グループには、必要に応じて新しいスレッドを作成する、関連するスレッド・プールがあります。 デフォルト・グループは、次の表で定義されているシステム・プロパティを使用して構成されることがあります。 デフォルト・グループのThreadFactoryが構成されない場合、デフォルト・グループのプールされたスレッドはdaemonスレッドです。
| システム・プロパティ | 説明 |
|---|---|
java.nio.channels.DefaultThreadPool.threadFactory
|
このプロパティの値は、具象ThreadFactoryクラスの完全修飾名になります。 クラスは、システム・クラス・ローダーを使用してロードされ、インスタンス化されます。 デフォルト・グループのスレッド・プールの各スレッドを作成するために、ファクトリのnewThreadメソッドが呼び出されます。 プロパティの値をロードしてインスタンス化するためのプロセスが失敗した場合、デフォルト・グループの構築中に未指定のエラーがスローされます。 |
java.nio.channels.DefaultThreadPool.initialSize
|
デフォルト・グループのinitialSizeパラメータの値(withCachedThreadPoolを参照)。 プロパティの値は、初期サイズ・パラメータであるIntegerのString表現になります。 値をIntegerとして解析できない場合、デフォルト・グループの構築中に未指定のエラーがスローされます。 |
スレッド
グループにバインドされたチャネルで開始された入出力操作の終了ハンドラは、グループ内のプールされたスレッドの1つによって呼び出されることが保証されます。 これによって、終了ハンドラは必ず、予期されるIDを持つスレッドによって実行されます。
入出力操作がただちに終了し、開始スレッドがグループ内のプールされたスレッドの1つである場合、終了ハンドラは開始スレッドによって直接呼び出されることがあります。 スタック・オーバーフローを回避するために、実装によっては、スレッド・スタックでの起動の数に関する制限が適用される場合があります。 一部の入出力操作では、開始スレッドによって終了ハンドラを直接呼び出すことは禁止されていることがあります(acceptを参照)。
シャットダウンおよび終了
shutdownメソッドは、グループの正しい順序でのシャットダウンを開始するために使用されます。 正しい順序でのシャットダウンによって、グループはシャットダウンとしてマークされ、グループにバインドするチャネルをさらに構築しようとすると、ShutdownChannelGroupExceptionがスローされます。 グループがシャットダウンされるかどうかは、isShutdownメソッドを使用してテストできます。 シャットダウン後に、グループにバインドされたすべての非同期チャネルがクローズされ、アクティブに実行中のすべての終了ハンドラの実行が終了し、グループによって使用されていたリソースが解放されると、グループは終了します。 実行ハンドラを実行しているスレッドの停止または割込みは試行されません。 グループが終了したかどうかをテストするためにisTerminatedメソッドが使用され、awaitTerminationメソッドを使用して、グループが終了するまでブロックすることができます。
shutdownNowメソッドを使用して、グループの強制的なシャットダウンを開始することができます。 shutdownNowメソッドは、正しい順序でのシャットダウンによって実行されるアクションのほかに、closeメソッドを呼び出す場合と同じようにグループ内の開いているチャネルをすべて閉じます。
- 導入されたバージョン:
- 1.7
- 関連項目:
-
コンストラクタのサマリー
コンストラクタ修飾子コンストラクタ説明protectedこのクラスの新しいインスタンスを初期化します。 -
メソッドのサマリー
修飾子と型メソッド説明abstract booleanawaitTermination(long timeout, TimeUnit unit) グループの終了を待機します。abstract booleanこの非同期チャネル・グループがシャットダウンされているかどうかを判断します。abstract booleanこのグループが終了したかどうかを判断します。provider()このチャネル・グループの作成元プロバイダを返します。abstract voidshutdown()正しい順序でグループのシャットダウンを開始します。abstract voidグループをシャットダウンし、グループ内のすべての開いているチャネルを閉じます。static AsynchronousChannelGroupwithCachedThreadPool(ExecutorService executor, int initialSize) 必要に応じて新しいスレッドを作成する指定されたスレッド・プールで、非同期チャネル・グループを作成します。static AsynchronousChannelGroupwithFixedThreadPool(int nThreads, ThreadFactory threadFactory) 固定されたスレッド・プールで非同期チャネル・グループを作成します。static AsynchronousChannelGroupwithThreadPool(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のスレッドが、入出力イベントを処理して、グループ内の非同期チャネルで開始された操作の終了結果をディスパッチするために送信されるアクティブな処理タスクになります。システム全体のデフォルト
AsynchronousChannelProviderオブジェクトのopenAsynchronousChannelGroup(int,ThreadFactory)メソッドを呼び出すことで、グループが作成されます。- パラメータ:
nThreads- プール内のスレッド数threadFactory- 新規スレッドの作成時に使用するファクトリ- 戻り値:
- 新しい非同期チャネル・グループ
- スロー:
IllegalArgumentException-nThreads <= 0の場合IOException- 入出力エラーが発生した場合
-
withCachedThreadPool
public static AsynchronousChannelGroup withCachedThreadPool(ExecutorService executor, int initialSize) throws IOException 必要に応じて新しいスレッドを作成する指定されたスレッド・プールで、非同期チャネル・グループを作成します。executorパラメータは、入出力イベントを処理して、グループ内の非同期チャネルで開始された操作の終了結果をディスパッチする目的で送信されるタスクを実行するために、必要に応じて新しいスレッドを作成するExecutorServiceです。 これは、以前に構築されたスレッドが使用可能な場合はそのスレッドを再利用することがあります。initialSizeパラメータは、送信できるタスクの初期の数に関するヒントとして実装によって使用されることがあります。 たとえば、これは、入出力イベントで待機するスレッドの初期の数を示すために使用できます。executorは、結果の非同期チャネル・グループのみに使用されることを想定しています。 グループを終了すると、executorサービスの正しい順序での
shutdownが実行されます。 ほかの手段でexecutorサービスをシャットダウンした場合の動作は保証されていません。システム全体のデフォルト
AsynchronousChannelProviderオブジェクトのopenAsynchronousChannelGroup(ExecutorService,int)メソッドを呼び出すことで、グループが作成されます。- パラメータ:
executor- 結果のグループのためのスレッド・プールinitialSize->=0の値、実装固有のデフォルトの場合は負の値- 戻り値:
- 新しい非同期チャネル・グループ
- スロー:
IOException- 入出力エラーが発生した場合- 関連項目:
-
withThreadPool
public static AsynchronousChannelGroup withThreadPool(ExecutorService executor) throws IOException 指定されたスレッド・プールで非同期チャネル・グループを作成します。executorパラメータは、グループ内の非同期チャネルで開始された操作の終了結果をディスパッチするために送信されるタスクを実行するExecutorServiceです。executorサービスの構成時には注意してください。 これは、送信されたタスクの直接ハンドオフまたはアンバウンド形式のキューをサポートするはずであり、
executeメソッドを呼び出すスレッドがタスクを直接呼び出すことはありません。 実装には追加の制約が必要な場合があります。executorは、結果の非同期チャネル・グループのみに使用されることを想定しています。 グループを終了すると、executorサービスの正しい順序での
shutdownが実行されます。 ほかの手段でexecutorサービスをシャットダウンした場合の動作は保証されていません。initialSizeが0のシステム全体のデフォルトAsynchronousChannelProviderオブジェクトのopenAsynchronousChannelGroup(ExecutorService,int)メソッドを呼び出すことで、グループが作成されます。- パラメータ:
executor- 結果のグループのためのスレッド・プール- 戻り値:
- 新しい非同期チャネル・グループ
- スロー:
IOException- 入出力エラーが発生した場合
-
isShutdown
public abstract boolean isShutdown()この非同期チャネル・グループがシャットダウンされているかどうかを判断します。- 戻り値:
- この非同期チャネル・グループがシャットダウンされるか、シャットダウン用にマークされている場合は
true。
-
isTerminated
public abstract boolean isTerminated()このグループが終了したかどうかを判断します。このメソッドが
trueを返す場合、関連するスレッド・プールも終了されます。- 戻り値:
- このグループが終了した場合は
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- timeout引数の時間単位- 戻り値:
- グループが終了した場合は
true、終了前にタイム・アウトが経過した場合はfalse - スロー:
InterruptedException- 待機中に割込みが発生した場合
-