JavaTM 2
Platform
Std. Ed. v1.4.0

java.nio.channels.spi
クラス AbstractInterruptibleChannel

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

public abstract class AbstractInterruptibleChannel
extends Object
implements Channel, InterruptibleChannel

割り込み可能チャネルのベース実装クラスです。

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

 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()
          このチャネルをクローズします。
 boolean isOpen()
          現在のチャネルの状態がオープンであるかどうかを判断します。
 
クラス 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 メソッドを呼び出します。

定義:
インタフェース Channel 内の close
例外:
IOException - 入出力エラーが発生した場合

implCloseChannel

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

このメソッドは、実際にチャネルをクローズするため、close メソッドによって呼び出されます。このメソッドは、チャネルがまだクローズしておらず、今後呼び出される可能性がない場合にのみ呼び出されます。

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

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

isOpen

public final boolean isOpen()
インタフェース Channel の記述:
現在のチャネルの状態がオープンであるかどうかを判断します。

定義:
インタフェース Channel 内の isOpen
戻り値:
現在のチャネルがオープンである場合にかぎり true

begin

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

このメソッドを呼び出すときは、このチャネルの非同期クローズと割り込みを実装するため、上記のように try ... finally ブロックを使って、連携する end メソッドも呼び出します。


end

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

このメソッドを呼び出すときは、このチャネルの非同期クローズと割り込みを実装するため、上記のように try ... finally ブロックを使って、連携する begin メソッドも呼び出します。

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

JavaTM 2
Platform
Std. Ed. v1.4.0

バグの報告と機能のリクエスト
これ以外の API リファレンスおよび開発者用ドキュメントについては、 Java 2 SDK SE 開発者用ドキュメントを参照してください。 開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、 およびコード実例が含まれています。

Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.