簡體   English   中英

SeletionKey.cancel()和iterator.remove()的區別-Java

[英]Difference of SeletionKey.cancel() and iterator.remove() - java

key.cancel()和iterator.remove()有什么區別? 從迭代器中刪除密鑰也不會從選擇器中刪除密鑰嗎?

假設:

...
SelectionKey key = (SelectionKey) iterator.next();
..
Iterator<SelectionKey> iterator  = selectedKeys.iterator();
...

SelectionKey的Javadoc表示如下。

每次在選擇器中注冊頻道時,都會創建一個選擇鍵。 密鑰一直有效,直到通過調用其cancel方法,關閉其通道或關閉其選擇器將其取消。 取消鍵不會立即將其從選擇器中刪除 ; 而是將其添加到選擇器的“取消鍵”集中,以便在下一次選擇操作期間將其刪除。

iterator.remove,將其從列表中刪除。

當您在Iterator上調用remove()時,它只會從列表中刪除Iterator當前所在的對象。 它不會在對象上調用任何方法,不會以任何方式影響它-只是將其從列表中刪除。

當您在SelectionKey上調用cancel()時,它恰好會做同樣的事情,但這是因為cancel()請求列表刪除該對象。 另外,它不能保證立即發生,而使用remove()立即從列表中刪除該項目。 cancel()只會使它無用,並且有機會將其從列表中刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM