JavaTM 2 Platform
Standard Ed. 5.0

java.nio.channels.spi
クラス AbstractInterruptibleChannel

java.lang.Object
  上位を拡張 java.nio.channels.spi.AbstractInterruptibleChannel
すべての実装されたインタフェース:
Closeable, Channel, InterruptibleChannel
直系の既知のサブクラス:
FileChannel, SelectableChannel

public abstract class AbstractInterruptibleChannel
extends Object
implements Channel, InterruptibleChannel

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

このクラスは、チャネルの非同期クローズと非同期割り込みを実装するのに必要な低レベルの機構をカプセル化しています。具象チャネルクラスは、無期限にブロックされる可能性のある入出力操作の呼び出し前に begin メソッドを、呼び出し後に end メソッドをそれぞれ呼び出す必要があります。なお、end メソッドが必ず呼び出されるようにするため、この 2 つのメソッドを 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

コンストラクタの概要
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 メソッドを呼び出します。

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

implCloseChannel

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

このメソッドは、チャネルをクローズする実際の処理を実行するために close メソッドによって呼び出されます。このメソッドは、チャネルがまだクローズしていない場合にのみ呼び出され、2 回以上呼び出されることはありません。

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

例外:
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
Standard Ed. 5.0

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

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。