1. 程式人生 > >Selector通過一個執行緒管理多個Channel

Selector通過一個執行緒管理多個Channel

Selector是NIO中實現I/O多路複用的關鍵類。Selector實現了通過一個執行緒管理多個Channel,從而管理多個網路連線的目的。

Channel代表這一個網路連線通道,我們可以將Channel註冊到Selector中以實現Selector對其的管理。一個Channel可以註冊到多個不同的Selector中。

當Channel註冊到Selector後會返回一個SelectionKey物件,該SelectionKey物件則代表這這個Channel和它註冊的Selector間的關係。並且SelectionKey中維護著兩個很重要的屬性:interestOps、readyOps

interestOps是我們希望Selector監聽Channel的哪些事件。我們將我們感興趣的事件設定到該欄位,這樣在selection操作時,當發現該Channel有我們所感興趣的事件發生時,就會將我們感興趣的事件再設定到readyOps中,這樣我們就能得知是哪些事件發生了以做相應處理

多個SocketChannel註冊Selector統一管理

個人分類: Java

雖然我們可以自己處理每一個Socket事件,比如讀寫資料,不過更常規的方式是註冊一個選擇器。這個選擇器偵聽著資料的變化事件。 每個註冊的通道都有自己的SelectionKey,用這個可以區分到底是哪個通道產生了事件。