モジュール 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引数は、I/O操作が実際に完了したかどうか、つまり、実行者に表示される効果があったかどうかを示します。 たとえば、バイトを読み取る操作の場合、この引数は、実行元のターゲット・バッファに実際に転送されたバイトのみの場合、trueにする必要があります。

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

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

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

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

    修飾子と型
    メソッド
    説明
    protected final void
    無期限にブロックされる入出力操作の開始をマークします。
    final void
    現在のチャネルをクローズします。
    protected final void
    end(boolean completed)
    無期限にブロックされる入出力操作の終了をマークします。
    protected abstract void
    現在のチャネルをクローズします。
    final boolean
    現在のチャネルの状態がオープンであるかどうかを判断します。

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

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • コンストラクタの詳細

    • 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 - チャネルのクローズ中に入出力エラーが発生した場合
    • isOpen

      public final boolean isOpen()
      インタフェースからコピーされた説明: Channel
      現在のチャネルの状態がオープンであるかどうかを判断します。
      定義:
      isOpen、インタフェースChannel
      戻り値:
      このチャネルがオープンしている場合のみtrue
    • begin

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

      このメソッドは、このチャネルの非同期のクローズおよび中断を実装するために、aboveに示すようにtry ... finallyブロックを使用してendメソッドと並行して起動する必要があります。

    • end

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

      このメソッドは、このチャネルの非同期のクローズおよび中断を実装するために、aboveに示すようにtry ... finallyブロックを使用してbeginメソッドと並行して起動する必要があります。

      パラメータ:
      completed - trueは、I/O操作が正常に完了した場合、つまり、操作の実行者に表示されるなんらかの影響があった場合にのみ行います
      例外:
      AsynchronousCloseException - チャネルが非同期クローズされた場合
      ClosedByInterruptException - 入出力操作中にブロックされたスレッドに割込みが発生した場合