JavaTM 2 Platform
Standard Ed. 6

java.nio.channels.spi
類別 AbstractSelector

java.lang.Object
  繼承者 java.nio.channels.Selector
      繼承者 java.nio.channels.spi.AbstractSelector

public abstract class AbstractSelector
extends Selector

選擇器的基本實作類別。

此類別封裝了實作中斷選擇操作所需的低層級別機制。在調用可能無限期阻塞的 I/O 操作之前和之後,具體的選擇器類別必須分別調用 beginend 方法。為了確保始終能夠調用 end 方法,應該在 try ... finally 塊中使用這些方法:

 try {
     begin();
     // Perform blocking I/O operation here
     ...
 } finally {
     end();
 }

此類別還定義了用於維護選擇器的已取消鍵集和從其通道的鍵集中移除鍵的方法,並且為了執行實際的通道註冊工作,還宣告了由可選擇通道的 register 方法所調用的抽象 register 方法。

從以下版本開始:
1.4

建構子摘要
protected AbstractSelector(SelectorProvider provider)
          初始化此類別的一個新實例。
 
方法摘要
protected  void begin()
          標記可能無限期阻塞的 I/O 操作的開始。
protected  Set<SelectionKey> cancelledKeys()
          獲取此選擇器的已取消鍵集。
 void close()
          關閉此選擇器。
protected  void deregister(AbstractSelectionKey key)
          從其通道的鍵集中移除給定的鍵。
protected  void end()
          標記可能無限期阻塞的 I/O 操作的結束。
protected abstract  void implCloseSelector()
          關閉此選擇器。
 boolean isOpen()
          告知此選擇器是否已打開。
 SelectorProvider provider()
          返回創建此通道的提供者。
protected abstract  SelectionKey register(AbstractSelectableChannel ch, int ops, Object att)
          向此選擇器註冊給定的通道。
 
從類別 java.nio.channels.Selector 繼承的方法
keys, open, select, select, selectedKeys, selectNow, wakeup
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

建構子詳細資訊

AbstractSelector

protected AbstractSelector(SelectorProvider provider)
初始化此類別的一個新實例。

方法詳細資訊

close

public final void close()
                 throws IOException
關閉此選擇器。

如果已關閉該選擇器,則此方法立即返回。否則它會將該選擇器標記為已關閉,然後調用 implCloseSelector 方法以完成關閉操作。

指定者:
類別 Selector 中的 close
拋出:
IOException - 如果發生 I/O 錯誤

implCloseSelector

protected abstract void implCloseSelector()
                                   throws IOException
關閉此選擇器。

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

此方法的實作必須安排阻塞於此選擇器上選擇操作中的所有其他執行緒立即返回,就像調用 wakeup 方法一樣。

拋出:
IOException - 如果關閉選擇器的同時發生 I/O 錯誤

isOpen

public final boolean isOpen()
從類別 Selector 複製的描述
告知此選擇器是否已打開。

指定者:
類別 Selector 中的 isOpen
返回:
當且僅當此選擇器已打開時才返回 true

provider

public final SelectorProvider provider()
返回創建此通道的提供者。

指定者:
類別 Selector 中的 provider
返回:
創建此通道的提供者

cancelledKeys

protected final Set<SelectionKey> cancelledKeys()
獲取此選擇器的已取消鍵集。

僅應在該鍵集上實作同步後才能使用它。

返回:
已取消鍵集

register

protected abstract SelectionKey register(AbstractSelectableChannel ch,
                                         int ops,
                                         Object att)
向此選擇器註冊給定的通道。

為了實際向此選擇器註冊通道,由該通道的 register 方法調用此方法。

參數:
ch - 要註冊的通道
ops - 初始的相關操作集,必須是有效的
att - 所得鍵的初始附件
返回:
表示給定通道向此選擇器註冊的新鍵

deregister

protected final void deregister(AbstractSelectionKey key)
從其通道的鍵集中移除給定的鍵。

必須由選擇器為所註銷的每個通道調用此方法。

參數:
key - 要移除的選擇鍵

begin

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

為了實作此選擇器的中斷,應該使用上面所示的 try ... finally 塊先後調用此方法和 end 方法。

如果調用某個執行緒的 interrupt 方法的同時該執行緒阻塞於選擇器上的某個 I/O 操作中,則調用此方法來安排選擇器的 wakeup 方法被調用。


end

protected final void end()
標記可能無限期阻塞的 I/O 操作的結束。

為了實作此選擇器的中斷,應該使用上面所示的 try ... finally 塊先後調用此方法和 begin 方法。


JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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