nio selector
时间: 2025-02-22 13:08:28 浏览: 33
### Java NIO Selector 使用方法
#### 创建和注册Selector
为了使用 `Selector`,首先需要创建一个实例。这可以通过调用静态工厂方法 `open()` 来完成。一旦有了 `Selector` 实例,就可以通过各种类型的通道(如 `ServerSocketChannel`, `SocketChannel` 等)将其注册到此选择器上,并指定感兴趣的事件集。
```java
// 打开一个新的Selector
Selector selector = Selector.open();
// 注册通道至Selector
channel.configureBlocking(false);
SelectionKey key = channel.register(selector, SelectionKey.OP_READ | SelectionKey.OP_WRITE);
```
上述代码片段展示了如何打开新的 `Selector` 并将非阻塞模式下的通道注册上去[^1]。
#### 处理选择键集合
当有至少一个已注册的通道准备好了所请求的操作时,可以选择一组 `SelectionKey` 对象来表示这些准备好执行 I/O 操作的通道。通常会进入一个无限循环,在每次迭代中调用 `select()` 方法等待某些通道变为可操作状态:
```java
while (true) {
int readyChannels = selector.select();
if(readyChannels == 0){
continue;
}
Set<SelectionKey> selectedKeys = selector.selectedKeys();
Iterator<SelectionKey> iterator = selectedKeys.iterator();
while(iterator.hasNext()){
SelectionKey key = iterator.next();
if(key.isAcceptable()) { /* Handle accept */ }
else if(key.isConnectable()) { /* Handle connect */ }
else if(key.isReadable()) { /* Handle read */ }
else if(key.isWritable()) { /* Handle write */ }
// 移除当前处理过的key
iterator.remove();
}
}
```
这段程序说明了典型的轮询机制以及对于不同类型的选择键的具体响应逻辑[^2]。
#### 关闭资源
最后不要忘记关闭不再使用的资源以释放系统资源:
```java
selector.close();
channel.close();
```
以上就是关于Java NIO Selector 的基本介绍与简单应用案例[^3]。
阅读全文
相关推荐




















