亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

為什么要在java nio的`selector.selectedKeys()。iterator()`中刪除鍵?

瀏覽:131日期:2024-04-26 10:56:48
如何解決為什么要在java nio的`selector.selectedKeys()。iterator()`中刪除鍵??

由于選擇器從不執(zhí)行此操作,因此只會添加到集合中,因此,如果不這樣做,則下次選擇器返回時,您將自己重新處理事件。

解決方法

我發(fā)現(xiàn)了一些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); } }

當他獲得選定的鍵時,他將循環(huán)中的鍵刪除。為什么我們應(yīng)該這樣做?

更新

感謝 EJPuser270349 提供的答案,我想我現(xiàn)在已經(jīng)明白了,讓我詳細解釋一下。

選擇器中有2個表:

登記表:當我們呼叫時channel.register,其中會有一個新的項目(密鑰)。僅當我們調(diào)用時key.cancel(),它將從此表中刪除。

準備好選擇表:當我們調(diào)用時selector.select(),選擇器將查找注冊表,找到可用的鍵,并將它們的引用復(fù)制到該選擇表中。選擇器不會清除此表中的項目(這意味著,即使我們selector.select()再次調(diào)用,它也不會清除現(xiàn)有項目)

這就是為什么iter.remove()當我們從選擇表中獲得鍵時必須調(diào)用的原因。如果沒有,selector.selectedKeys()即使它尚未準備好使用,我們也會一次又一次地獲得密鑰。

標簽: java
相關(guān)文章:
主站蜘蛛池模板: 九九热这里只有国产精品 | 黄色aaa毛片 | 91久久老司机福利精品网 | 国产原创麻豆精品视频 | 成年女人免费看片 | 免费国产精成人品 | 91香蕉视频在线观看 | 中文字幕在线观看一区 | 国产精品综合网 | 国产精品国产三级国产在线观看 | 国产成人亚洲精品蜜芽影院 | 久久精品免视看国产明星 | 在线日韩视频 | 亚洲国产成人精品不卡青青草原 | 黄色片在线免费看 | 国产日本高清 | 久久久久女人精品毛片九一 | 99久久免费精品高清特色大片 | 亚洲综合伊人制服丝袜美腿 | 日本老太婆一级毛片免费 | 亚洲国产第一区二区香蕉日日 | 婷婷色天使在线视频观看 | 鲁大师视频在线观看免费播放 | 国产精品三级在线观看 | 成人免费a视频 | 国产成人毛片视频不卡在线 | 国产精品福利久久2020 | 泰国一级淫片免费看 | 特大一级aaaaa毛片 | 国产精品久久久久免费 | 欧美精品在线一区二区三区 | 国产大片免费观看资源 | 国产精品福利自产拍网站 | 亚洲欧美日韩中文字幕网址 | 国产一区二区三区四区五区tv | 中文字幕一区二区视频 | 玛雅视频网站在线观看免费 | 激情九月婷婷 | 国产免费人做爰午夜视频 | 亚洲第一页视频 | 嘿咻18视频在线看 |