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
、インタフェース: AutoCloseable
close
、インタフェース: Channel
close
、インタフェース: Closeable
IOException
- 入出力エラーが発生した場合 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.