当前位置: 代码迷 >> J2EE >> 这段看不懂啊求教,该怎么处理
  详细解决方案

这段看不懂啊求教,该怎么处理

热度:104   发布时间:2016-04-17 23:05:30.0
这段看不懂啊!?求教

selector.select();
Set selectedKeys = selector.selectedKeys();
Iterator keyIterator = selectedKeys.iterator();
while(keyIterator.hasNext()) {
    SelectionKey key = keyIterator.next();
    // 移除已处理过的键
    keyIterator.remove();
}

keyIterator.remove();就是这里,移除的明明是迭代器里的东西啊,为什么会把selectedKeys 集合里的东西移除掉
------解决思路----------------------
你在循环里面移除迭代器,你边循环边移除,循环完了,你也就移除完毕了

看看remove的玩法吧
------解决思路----------------------
Java Collection由于安全性问题,当一个线程在对Collection进行迭代时,另一个线程如果调用remove()方法则会抛出ConcurrentModificationException,只能使用迭代器本身的remove()进行删除。
selector.selectedKeys内部实现应该是使用了Java Collection下的某个类来实现的,所以返回的迭代器的remove()方法可以正确删除一个元素。
------解决思路----------------------
可以看源码啊!!!!
------解决思路----------------------
引用:
Java Collection由于安全性问题,当一个线程在对Collection进行迭代时,另一个线程如果调用remove()方法则会抛出ConcurrentModificationException,只能使用迭代器本身的remove()进行删除。
selector.selectedKeys内部实现应该是使用了Java Collection下的某个类来实现的,所以返回的迭代器的remove()方法可以正确删除一个元素。


+++
  相关解决方案