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, 2014, Oracle and/or its affiliates. All rights reserved.