Java高併發教程:詳解NIO Selector類
NIO Selector
Java NIO Selector可以檢查一個或多個Java NIO Channel實例,並確定哪些通道可供使用,例如read或write。 這樣,單個線程可以管理多個通道,從而可以管理多個網絡連接。Selector 選擇器的使命是完成IO的多路複用。一個通道代表一條連接通路,通過選擇器可以同時監控多個通道IO(輸入輸出)狀況。選擇器和通道的關係,是監控和被監控的關係。
如下圖所示爲一個Selector同時監控3個Channel:
選擇器提供了獨特的API方法,能夠選出Select所監控的通道擁有哪些已經準備好的,就緒的IO操作事件。可供選擇器監控的通道IO事件類型,包括以下:
- 可讀:SelectionKey.OP_READ
- 可寫:SelectionKey.OP_WRITE
- 連接:SelectionKey.OP_CONNECT
- 接收:SelectionKey.OP_ACCEPT
判斷一個通道能否被選擇器監控或者選擇,有一個前提:判斷它是否繼承了抽象類SelectableChannel。
注:IO事件指的是通道的某個IO操作的一種就緒狀態。
參考資料
- https://www.baeldung.com/java-nio-selector
- http://tutorials.jenkov.com/java-nio/selectors.html
- 《基於Netty、Redis、Zookeeper高併發實戰》