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
メソッドの実装では、チャネルをクローズしようとするほかのスレッドに対して同期処理を行う必要はありません。
修飾子 | コンストラクタと説明 |
---|---|
protected |
AbstractInterruptibleChannel()
このクラスの新しいインスタンスを初期化します。
|
修飾子と型 | メソッドと説明 |
---|---|
protected void |
begin()
無期限にブロックされる入出力操作の開始をマークします。
|
void |
close()
現在のチャネルをクローズします。
|
protected void |
end(boolean completed)
無期限にブロックされる入出力操作の終了をマークします。
|
protected abstract void |
implCloseChannel()
現在のチャネルをクローズします。
|
boolean |
isOpen()
現在のチャネルの状態がオープンであるかどうかを判断します。
|
protected AbstractInterruptibleChannel()
public final void close() throws IOException
チャネルがすでにクローズしている場合、このメソッドはただちに終了します。それ以外の場合は、チャネルのクローズをマークしてから、クローズ操作を完了するために implCloseChannel
メソッドを呼び出します。
close
、インタフェース: Closeable
close
、インタフェース: AutoCloseable
close
、インタフェース: Channel
close
、インタフェース: InterruptibleChannel
IOException
- 入出力エラーが発生した場合protected abstract void implCloseChannel() throws IOException
このメソッドは、チャネルをクローズする実際の処理を実行するために close
メソッドによって呼び出されます。このメソッドは、チャネルがまだクローズしていない場合にのみ呼び出され、2 回以上呼び出されることはありません。
このメソッドの実装は、このチャネルに対する入出力操作の途中でブロックされるその他のスレッドを、例外をスローするか、通常の方法を使ってただちに終了させることになっています。
IOException
- チャネルのクローズ中に入出力エラーが発生した場合public final boolean isOpen()
Channel
protected final void begin()
protected final void end(boolean completed) throws AsynchronousCloseException
このチャネルの非同期クローズと非同期割り込みを実装するには、上に示したとおり、try ... finally ブロックを使ってこのメソッドと begin
メソッドをペアで呼び出す必要があります。
completed
- 入出力操作が正しく完了した場合、つまり、操作の呼び出し側に何らかの変化が見られた場合にかぎり trueAsynchronousCloseException
- チャネルが非同期クローズされた場合ClosedByInterruptException
- 入出力操作中にブロックされたスレッドに割り込みが発生した場合 バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.