モジュール java.base
パッケージ java.nio.channels

インタフェースAsynchronousChannel

  • すべてのスーパー・インタフェース:
    AutoCloseable, Channel, Closeable
    既知のすべてのサブインタフェース:
    AsynchronousByteChannel
    既知のすべての実装クラス:
    AsynchronousFileChannel, AsynchronousServerSocketChannel, AsynchronousSocketChannel

    public interface AsynchronousChannel
    extends Channel
    非同期入出力操作をサポートするチャネル。 非同期入出力操作は通常、次の2つの形式のいずれかを取ります。
    1. Future<V> operation(...)
    2. void operation(... A attachment, CompletionHandler<V,? super A> handler)
    ここで、operationは入出力操作の名前(たとえばreadまたはwrite)、Vは入出力操作の結果タイプ、Aは、結果を消費する際にコンテキストを提供するために入出力操作に接続されたオブジェクトのタイプです。 ステートレス CompletionHandlerを使用して多数の入出力操作の結果を消費する場合、接続が重要です。

    最初の形式では、操作が完了したかどうかを確認し、操作の完了を待機し、結果を取得するために、Futureインタフェースによって定義されたメソッドが使用されることがあります。 2番目の形式では、入出力操作が完了または失敗したときにその結果を消費するために、CompletionHandlerが呼び出されます。

    このインタフェースを実装したチャネルは非同期クローズ可能です。入出力操作がチャネルで未処理の場合に、チャネルのcloseメソッドが呼び出されると、入出力操作は例外AsynchronousCloseExceptionをスローして失敗します。

    非同期チャネルは、複数の並行スレッドで安全に使用できます。 一部のチャネル実装では、並行読み取りおよび書込みがサポートされることがありますが、特定の時点で複数の読取り操作と書込み操作が未処理になることは許可されない場合があります。

    取消し

    Futureインタフェースは、実行を取り消すcancelメソッドを定義します。 これによって、入出力操作の結果を待機しているすべてのスレッドがCancellationExceptionをスローします。 基本となる入出力操作を取り消すことができるかどうかは実装に大きく依存するため、指定できません。 取消しによって、チャネルまたはそのチャネルの接続先のエンティティが整合性のない状態になる場合、チャネルは、取り消された操作に似た入出力操作をそのあとに開始しないようにする、実装固有のエラー状態になります。 たとえば、読取り操作が取り消されても、バイトがチャネルから読み取られていないことを実装で保証できない場合、チャネルはエラー状態になります。そのあとでread操作の開始を試行すると、未指定のランタイム例外がスローされます。 同様に、書込み操作が取り消されても、バイトがチャネルに書き込まれていないことを実装で保証できない場合、そのあとでwriteを開始しようとしても、未指定のランタイム例外がスローされて失敗します。

    mayInterruptIfRunningパラメータをtrueに設定してcancelメソッドを呼び出すと、入出力操作はチャネルのクローズによって割り込まれることがあります。 その場合、入出力操作の結果を待機しているすべてのスレッドがCancellationExceptionをスローし、チャネルで未処理のその他の入出力操作はすべて、例外AsynchronousCloseExceptionをスローして完了します。

    読み取りまたは書込み操作を取り消すためにcancelメソッドが呼び出される場合、入出力操作で使用されるすべてのバッファを破棄するか、チャネルが開いたままになっている間はバッファへのアクセスが行われないように注意することをお薦めします。

    導入されたバージョン:
    1.7
    • メソッドの詳細

      • close

        void close()
            throws IOException
        現在のチャネルをクローズします。

        このチャネルで未処理の非同期操作はすべて、例外AsynchronousCloseExceptionをスローして完了します。 チャネルのクローズ後に、非同期入出力操作をさらに開始しようとすると、原因ClosedChannelExceptionですぐに終了します。

        それ以外の場合は、このメソッドはChannelインタフェースの指定どおりに動作します。

        定義:
        close、インタフェース: AutoCloseable
        定義:
        close、インタフェース: Channel
        定義:
        close、インタフェース: Closeable
        例外:
        IOException - 入出力エラーが発生した場合