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

クラスAbstractInterruptibleChannel

java.lang.Object
java.nio.channels.spi.AbstractInterruptibleChannel
すべての実装されたインタフェース:
Closeable, AutoCloseable, Channel, InterruptibleChannel
直系の既知のサブクラス:
FileChannel, SelectableChannel

public abstract class AbstractInterruptibleChannel
extends Object
implements Channel, InterruptibleChannel
割込み可能チャネルのベース実装クラスです。

このクラスは、チャネルの非同期クローズと非同期割込みを実装するのに必要な低レベルの機構をカプセル化しています。 具象チャネル・クラスは、無期限にブロックされる可能性のある入出力操作の呼出し前にbeginメソッドを、呼出し後にendメソッドをそれぞれ呼び出す必要があります。 endメソッドが必ず呼び出されるように、try ... finallyブロック内でこれらのメソッドを使用するようにしてください。

 boolean completed = false;
 try {
     begin();
     completed = ...;    // Perform blocking I/O operation
     return ...;         // Return result
 } finally {
     end(completed);
 }

endメソッドのcompleted引数は、入出力操作が実際に完了したかどうか、つまり、呼出し元で何かの変化を認識できるかどうかを示します。 たとえば、バイトを読み取る操作では、呼出し元のターゲット・バッファに実際にバイトが転送された場合に限り、この引数がtrueになります。

具象チャネル・クラスは、implCloseChannelメソッドも実装する必要があります。その場合、チャネルに対するネイティブの入出力操作の途中でブロックされているスレッドがあるときにこのメソッドが呼び出されると、例外をスローするか通常の方法でただちに終了するように実装します。 スレッドに割込みが発生した場合や、スレッドをブロックしているチャネルが非同期でクローズされた場合、チャネルのendメソッドは該当する例外をスローします。

このクラスは、Channelの仕様を実装するのに必要な同期処理を行います。 implCloseChannelメソッドの実装では、チャネルをクローズしようとするほかのスレッドに対して同期処理を行う必要はありません。

導入されたバージョン:
1.4
  • コンストラクタのサマリー

    コンストラクタ
    修飾子 コンストラクタ 説明
    protected AbstractInterruptibleChannel()
    このクラスの新しいインスタンスを初期化します。
  • メソッドのサマリー

    修飾子と型 メソッド 説明
    protected void begin()
    無期限にブロックされる入出力操作の開始をマークします。
    void close()
    現在のチャネルをクローズします。
    protected void end​(boolean completed)
    無期限にブロックされる入出力操作の終了をマークします。
    protected abstract void implCloseChannel()
    現在のチャネルをクローズします。

    クラス java.lang.Objectで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    インタフェース java.nio.channels.Channelで宣言されたメソッド

    isOpen
  • コンストラクタの詳細

    • AbstractInterruptibleChannel

      protected AbstractInterruptibleChannel()
      このクラスの新しいインスタンスを初期化します。
  • メソッドの詳細

    • close

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

      チャネルがすでにクローズしている場合、このメソッドはただちに終了します。 それ以外の場合は、チャネルのクローズをマークしてから、クローズ操作を完了するためにimplCloseChannelメソッドを呼び出します。

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

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

      このメソッドは、チャネルをクローズする実際の処理を実行するためにcloseメソッドによって呼び出されます。 このメソッドは、チャネルがまだクローズしていない場合にのみ呼び出され、2回以上呼び出されることはありません。

      このメソッドの実装は、このチャネルに対する入出力操作の途中でブロックされるその他のスレッドを、例外をスローするか、通常の方法を使ってただちに終了させることになっています。

      例外:
      IOException - チャネルのクローズ中に入出力エラーが発生した場合
    • begin

      protected final void begin()
      無期限にブロックされる入出力操作の開始をマークします。

      このチャネルの非同期クローズと非同期割込みを実装するには、に示したとおり、try ... finallyブロックを使ってこのメソッドとendメソッドをペアで呼び出す必要があります。

    • end

      protected final void end​(boolean completed) throws AsynchronousCloseException
      無期限にブロックされる入出力操作の終了をマークします。

      このチャネルの非同期クローズと非同期割込みを実装するには、に示したとおり、try ... finallyブロックを使ってこのメソッドとbeginメソッドをペアで呼び出す必要があります。

      パラメータ:
      completed - 入出力操作が正しく完了した場合、つまり、操作の呼出し側に何らかの変化が見られた場合にかぎりtrue
      例外:
      AsynchronousCloseException - チャネルが非同期クローズされた場合
      ClosedByInterruptException - 入出力操作中にブロックされたスレッドに割込みが発生した場合