java Selector的迭代器是怎么回事?

    public void talk()throws IOException
    {
        datagramChannel.register(selector , SelectionKey.OP_READ | SelectionKey.OP_WRITE) ;
        while(selector.select() > 0)
        {
            Set readyKeys = selector.selectedKeys() ;
            Iterator it = readyKeys.iterator() ;
            while(it.hasNext())
            {
                SelectionKey key = null ;
                try
                {
                    key = (SelectionKey) it.next() ;
                    //为什么要进行这一步??                   
                    it.remove() ;

                    if(key.isReadable())
                        receive(key) ;
                    if(key.isWritable())
                        send(key) ;
                }
                catch (IOException e)
                {
                    e.printStackTrace() ;
                    try
                    {
                        if(key != null)
                        {
                            key.cancel() ;
                            key.channel().close() ;
                        }
                    }
                    catch (Exception ex)
                    {
                        ex.printStackTrace() ;
                    }
                }
            }
        }
    }

为什么在每次获取到Selectionkey后都要用迭代器在集合中删除掉这一项呢?

阅读 2.8k
1 个回答

以我不知道底层的理解:这是个消息,处理的时候肯定要remove掉,不然重复处理毫无意义

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
101 新手上路
子站问答
访问
宣传栏