- すべての実装されたインタフェース:
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
-
コンストラクタのサマリー
コンストラクタ 修飾子 コンストラクタ 説明 protectedAbstractInterruptibleChannel()このクラスの新しいインスタンスを初期化します。 -
メソッドのサマリー
修飾子と型 メソッド 説明 protected voidbegin()無期限にブロックされる入出力操作の開始をマークします。voidclose()現在のチャネルをクローズします。protected voidend(boolean completed)無期限にブロックされる入出力操作の終了をマークします。protected abstract voidimplCloseChannel()現在のチャネルをクローズします。
-
コンストラクタの詳細
-
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() -
end
protected final void end(boolean completed) throws AsynchronousCloseException無期限にブロックされる入出力操作の終了をマークします。このチャネルの非同期クローズと非同期割込みを実装するには、上に示したとおり、
try...finallyブロックを使ってこのメソッドとbeginメソッドをペアで呼び出す必要があります。- パラメータ:
completed- 入出力操作が正しく完了した場合、つまり、操作の呼出し側に何らかの変化が見られた場合にかぎりtrue- 例外:
AsynchronousCloseException- チャネルが非同期クローズされた場合ClosedByInterruptException- 入出力操作中にブロックされたスレッドに割込みが発生した場合
-