Java高并发教程:详解NIO Selector类
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高并发实战》