为什么在java nio中应该删除‘selector.selectedKeys().iterator()’中的键?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (109)

我找到了一些java nio的示例代码:

 ServerSocketChannel server = ServerSocketChannel.open();  
 Selector selector = Selector.open();  
 server.socket().bind(new InetSocketAddress(8080));  
 server.configureBlocking(false); 
 server.register(selector, SelectionKey.OP_ACCEPT);  

 while(true) {
     selector.select(); 
     Iterator iter = selector.selectedKeys().iterator();  
     while (iter.hasNext()) {  
         SelectionKey key = (SelectionKey) iter.next();  
         iter.remove();  // Why remove it? 
         process(key);  
     }
 }

当他得到所选的键时,他会删除循环中的键。我们为什么要这么做?


提问于
用户回答回答于

因为Selector从来不这样做,所以它只会添加到集合中,所以如果不这样做,下次Selector返回时您将自己重新处理事件。

用户回答回答于

因为除非你这么做,否则你无法检测到新的事件重复。

扫码关注云+社区