1. 選擇鍵
Channel 和 Selector的關系确定好後,并且一旦通道處于某種就緒狀态,就可以被選擇器查詢到。
那麼,怎麼進行查詢呢?
這個工作,使用選擇器Selector的select() 方法完成。
select()方法:對感興趣的通道操作,進行就緒狀态的查詢。

Selector可以不斷地查詢Channel中發生的操作的狀态。并且挑選感興趣的操作的就緒狀态。
一旦通道有操作的就緒狀态達成,并且是Selector感興趣的操作,就會被Selector選中,放入選擇鍵集合中。
select(): 選擇器等待用戶端連接配接的方法 阻塞問題: 1. 在開始沒有客戶通路的時候,是阻塞的 2. 在有客戶來通路的時候,方法會變成非阻塞的 3. 如果客戶的通路,被處理結束之後,又會恢複成阻塞的 selectedKeys(): 選擇器會把被連接配接的伺服器對象,放在Set集合中,這個方法就是傳回一個Set集合
2. Selector的使用流程
<1> 建立Selector
Selector對象,是通過調用靜态工廠方法open(),來執行個體化的,如下:
<2>将Channel注冊到Selector
要實作Selector管理Channel,需要将channel注冊到相應的Selector上:
上面通過調用通道的register()方法,會将它注冊到一個選擇器上
首先需要注意的是:
與Selector一起使用時,Channel必須處于非阻塞模式下,否則将抛出異常IllegalBlockingModeException
3. 輪詢查詢就緒操作
萬事俱備,下一步是查詢就緒的操作
通過Selector的select()方法,可以查詢出已經就緒的通道操作,這些就緒的狀态集合,包存在一個元素是SelectionKey對象的Set集合中。
select()方法傳回的int值,表示有多少通道已經就緒
而一旦調用select()方法, 并且傳回值不為0時,下一步該怎麼做?
通過調用Selector的selectedKeys()方法,來通路已選擇鍵集合,然後疊代集合的每一個選擇鍵元素,根據就緒操作的類型,
完成對應的操作(見下篇:NIO程式設計執行個體)。