public interface AsynchronousChannel extends Channel
Future<V> operation(...)void operation(... A attachment, CompletionHandler<V,? super A> handler)CompletionHandlerを使用して多数の入出力操作の結果を消費する場合、接続が重要です。
最初の形式では、操作が完了したかどうかを確認し、操作の完了を待機し、結果を取得するために、Futureインタフェースによって定義されたメソッドが使用されることがあります。2番目の形式では、入出力操作が完了または失敗したときにその結果を消費するために、CompletionHandlerが呼び出されます。
このインタフェースを実装したチャネルは非同期クローズ可能です。入出力操作がチャネルで未処理の場合に、チャネルのcloseメソッドが呼び出されると、入出力操作は例外AsynchronousCloseExceptionをスローして失敗します。
非同期チャネルは、複数の並行スレッドで安全に使用できます。一部のチャネル実装では、並行読み取りおよび書込みがサポートされることがありますが、特定の時点で複数の読取り操作と書込み操作が未処理になることは許可されない場合があります。
Futureインタフェースは、実行を取り消すcancelメソッドを定義します。これによって、入出力操作の結果を待機しているすべてのスレッドがCancellationExceptionをスローします。基本となる入出力操作を取り消すことができるかどうかは実装に大きく依存するため、指定できません。取消しによって、チャネルまたはそのチャネルの接続先のエンティティが整合性のない状態になる場合、チャネルは、取り消された操作に似た入出力操作をそのあとに開始しないようにする、実装固有のエラー状態になります。たとえば、読取り操作が取り消されても、バイトがチャネルから読み取られていないことを実装で保証できない場合、チャネルはエラー状態になります。そのあとでread操作の開始を試行すると、未指定のランタイム例外がスローされます。同様に、書込み操作が取り消されても、バイトがチャネルに書き込まれていないことを実装で保証できない場合、そのあとでwriteを開始しようとしても、未指定のランタイム例外がスローされて失敗します。
mayInterruptIfRunningパラメータをtrueに設定してcancelメソッドを呼び出すと、入出力操作はチャネルのクローズによって割り込まれることがあります。その場合、入出力操作の結果を待機しているすべてのスレッドがCancellationExceptionをスローし、チャネルで未処理のその他の入出力操作はすべて、例外AsynchronousCloseExceptionをスローして完了します。
読み取りまたは書込み操作を取り消すためにcancelメソッドが呼び出される場合、入出力操作で使用されるすべてのバッファを破棄するか、チャネルが開いたままになっている間はバッファへのアクセスが行われないように注意することをお薦めします。
| 修飾子と型 | メソッドと説明 |
|---|---|
void |
close()
現在のチャネルをクローズします。
|
void close()
throws IOException
このチャネルで未処理の非同期操作はすべて、例外AsynchronousCloseExceptionをスローして完了します。チャネルのクローズ後に、非同期入出力操作をさらに開始しようとすると、原因ClosedChannelExceptionですぐに終了します。
それ以外の場合は、このメソッドはChannelインタフェースの指定どおりに動作します。
close、インタフェース: AutoCloseableclose、インタフェース: Channelclose、インタフェース: CloseableIOException - 入出力エラーが発生した場合 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.