我正在尝试实现一个对 ConcurrentHashMap 的元素进行循环的函数。比如ConcurrentHashMap中有{a, b, c}元素,第一次调用函数返回a,第二次返回b,第三次返回c,第四次,它返回一个。
private static Enumeration<Peer> nhEnmu;
private static final ConcurrentHashMap<String, Peer> peers;
private synchronized static Peer getNextPeer()
{
if (nhEnmu == null || !nhEnmu.hasMoreElements())
{
nhEnmu = peers.elements();
}
return nhEnmu.nextElement();
}
我如上所述实现了这个功能,但是,NoSuchElementException 不断弹出,我想知道使用 elements() 方法有什么问题吗?如果不合适,我应该适应什么实现?谢谢!
异常跟踪如下:
at Main$MsgProcessorThread.run(Main.java:119)
Exception in thread "Thread-1" java.util.NoSuchElementException at
java.util.concurrent.ConcurrentHashMap$HashIterator.nextEntry(ConcurrentHashMap.java:1266) at
java.util.concurrent.ConcurrentHashMap$ValueIterator.nextElement(ConcurrentHashMap.java:1297) at
control.Protocol.getNextPeer(Protocol.java:89)