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 を参照)。プロパティーの値は、初期サイズパラメータである Integer の String 表現になります。値を Integer として解析できない場合、デフォルトグループの構築中に未指定のエラーがスローされます。 |
グループにバインドされたチャネルで開始された入出力操作の終了ハンドラは、グループ内のプールされたスレッドの 1 つによって呼び出されることが保証されます。これによって、終了ハンドラは必ず、予期される ID を持つスレッドによって実行されます。
入出力操作がただちに終了し、開始スレッドがグループ内のプールされたスレッドの 1 つである場合、終了ハンドラは開始スレッドによって直接呼び出されることがあります。スタックオーバーフローを回避するために、実装によっては、スレッドスタックでの起動の数に関する制限が適用される場合があります。一部の入出力操作では、開始スレッドによって終了ハンドラを直接呼び出すことは禁止されていることがあります (accept を参照)。
シャットダウンおよび終了
shutdown メソッドは、グループの正しい順序でのシャットダウンを開始するために使用されます。正しい順序でのシャットダウンによって、グループはシャットダウンとしてマークされ、グループにバインドするチャネルをさらに構築しようとすると、ShutdownChannelGroupException がスローされます。グループがシャットダウンされるかどうかは、isShutdown メソッドを使用してテストできます。シャットダウン後に、グループにバインドされたすべての非同期チャネルがクローズされ、アクティブに実行中のすべての終了ハンドラの実行が終了し、グループによって使用されていたリソースが解放されると、グループは終了します。実行ハンドラを実行しているスレッドの停止または割り込みは試行されません。グループが終了したかどうかをテストするために isTerminated メソッドが使用され、awaitTermination メソッドを使用して、グループが終了するまでブロックすることができます。
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)
指定されたスレッドプールで非同期チャネルグループを作成します。
|
protected AsynchronousChannelGroup(AsynchronousChannelProvider provider)
provider - このグループの非同期チャネルプロバイダpublic final AsynchronousChannelProvider provider()
public static AsynchronousChannelGroup withFixedThreadPool(int nThreads, ThreadFactory threadFactory) throws IOException
結果の非同期チャネルグループは、固定数のスレッドを再利用します。任意のポイントで、最大 nThreads のスレッドが、入出力イベントを処理して、グループ内の非同期チャネルで開始された操作の終了結果をディスパッチするために送信されるアクティブな処理タスクになります。
システム全体のデフォルト AsynchronousChannelProvider オブジェクトの openAsynchronousChannelGroup(int,ThreadFactory) メソッドを呼び出すことで、グループが作成されます。
nThreads - プール内のスレッド数threadFactory - 新規スレッドの作成時に使用するファクトリIllegalArgumentException - nThreads <= 0 の場合IOException - 入出力エラーが発生した場合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 - 入出力エラーが発生した場合Executors.newCachedThreadPool()public static AsynchronousChannelGroup withThreadPool(ExecutorService executor) throws IOException
executor パラメータは、グループ内の非同期チャネルで開始された操作の終了結果をディスパッチするために送信されるタスクを実行する ExecutorService です。
executor サービスの構成時には注意してください。これは、送信されたタスクの直接ハンドオフまたはアンバウンド形式のキューをサポートするはずであり、execute メソッドを呼び出すスレッドがタスクを直接呼び出すことはありません。実装には追加の制約が必要な場合があります。
executor は、結果の非同期チャネルグループのみに使用されることを想定しています。グループを終了すると、executor サービスの正しい順序での shutdown が実行されます。ほかの手段で executor サービスをシャットダウンした場合の動作は保証されていません。
initialSize が 0 のシステム全体のデフォルト AsynchronousChannelProvider オブジェクトの openAsynchronousChannelGroup(ExecutorService,int) メソッドを呼び出すことで、グループが作成されます。
executor - 結果のグループのためのスレッドプールIOException - 入出力エラーが発生した場合public abstract boolean isShutdown()
true。public abstract boolean isTerminated()
このメソッドが true を返す場合、関連するスレッドプールも終了されます。
true。public abstract void shutdown()
このメソッドがグループにシャットダウンのマークを付けます。このグループにバインドするチャネルをさらに構築しようとすると、ShutdownChannelGroupException がスローされます。グループ内のすべての非同期チャネルがクローズされ、アクティブに実行中のすべての終了ハンドラの実行が終了し、すべてのリソースが解放されると、グループは終了します。グループがすでにシャットダウンしている場合、このメソッドは何の影響も与えません。
public abstract void shutdownNow()
throws IOException
shutdown メソッドによって実行されるアクションに加えて、このメソッドは、グループ内で開いているすべてのチャネルで close メソッドを呼び出します。このメソッドは、実行ハンドラを実行しているスレッドの停止または割り込みを試行しません。アクティブに実行中の終了ハンドラの実行が終了し、すべてのリソースが解放されると、グループは終了します。このメソッドはいつでも呼び出すことができます。ほかの何らかのスレッドがこのメソッドをすでに呼び出している場合、別の呼び出しは最初の呼び出しが完了するまでブロックされ、そのあと何も効果を発揮することなく戻ります。
IOException - 入出力エラーが発生した場合public abstract boolean awaitTermination(long timeout,
TimeUnit unit)
throws InterruptedException
このメソッドは、グループが終了するか、タイムアウトが発生するか、現在のスレッドが割り込まれるか、そのいずれかが最初に発生するまでブロックされます。
timeout - 待機する最長時間。待機しない場合はゼロ以下の値unit - timeout 引数の時間単位true、終了前にタイムアウトが経過した場合は falseInterruptedException - 待機中に割り込みが発生した場合 バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.