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() throws IOException
このチャネルで未処理の非同期操作はすべて、例外 AsynchronousCloseException
をスローして完了します。チャネルのクローズ後に、非同期入出力操作をさらに開始しようとすると、原因 ClosedChannelException
ですぐに終了します。
それ以外の場合は、このメソッドは Channel
インタフェースの指定どおりに動作します。
close
、インタフェース: AutoCloseable
close
、インタフェース: Channel
close
、インタフェース: Closeable
IOException
- 入出力エラーが発生した場合 バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.