モジュール 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