JavaTM 2 Platform
Standard Ed. 6

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

可中斷通道的基本實作類別。

此類別封裝了實作通道非同步關閉和中斷所需的低層級別機制。在調用可能無限期阻塞的 I/O 操作之前和之後,具體的通道類別必須分別調用 beginend 方法。為了確保始終能夠調用 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 方法,其方式為:如果調用此方法的同時,另一個執行緒阻塞在該通道上的本機 I/O 操作中,則該操作將立即返回,要麼拋出異常,要麼正常返回。如果某個執行緒被中斷,或者非同步地關閉了阻塞執行緒所處的通道,則該通道的 end 方法會拋出相應的異常。

此類別執行實作 Channel 規範所需的同步。implCloseChannel 方法的實作不必與其他可能試圖關閉通道的執行緒同步。

從以下版本開始:
1.4

建構子摘要
protected AbstractInterruptibleChannel()
          初始化此類別的一個新實例。
 
方法摘要
protected  void begin()
          標記可能無限期阻塞的 I/O 操作的開始。
 void close()
          關閉此通道。
protected  void end(boolean completed)
          標記可能無限期阻塞的 I/O 操作的結尾。
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 - 如果發生 I/O 錯誤

implCloseChannel

protected abstract void implCloseChannel()
                                  throws IOException
關閉此通道。

為了實際關閉此通道,由 close 方法調用此方法。僅在此通道尚未關閉時才能調用此方法,並且只能調用一次。

此方法的實作必須安排阻塞於此通道上 I/O 操作中的所有其他執行緒立即返回,要麼拋出異常,要麼正常返回。

拋出:
IOException - 如果關閉通道的同時發生 I/O 錯誤

isOpen

public final boolean isOpen()
從介面 Channel 複製的描述
判斷此通道是否處於打開狀態。

指定者:
介面 Channel 中的 isOpen
返回:
當且僅當此通道處於打開狀態時才返回 true

begin

protected final void begin()
標記可能無限期阻塞的 I/O 操作的開始。

為了實作此通道的非同步關閉和中斷,應該使用上面所示的 try ... finally 塊先後調用此方法和 end 方法。


end

protected final void end(boolean completed)
                  throws AsynchronousCloseException
標記可能無限期阻塞的 I/O 操作的結尾。

為了實作此通道的非同步關閉和中斷,應該使用上面所示的 try ... finally 塊先後調用此方法和 begin 方法。

參數:
completed - 當且僅當 I/O 操作成功完成(也就是說該操作產生對其調用者可見的效果)時才為 true
拋出:
AsynchronousCloseException - 如果已經非同步地關閉了通道
ClosedByInterruptException - 如果已中斷了阻塞在 I/O 操作中的執行緒

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only