我想實現一個函數,對ConcurrentHashMap的元素執行循環法。例如,如果ConcurrentHashMap中有{a,b,c}元素,那麼當我第一次調用該函數時,它將返回a,第二次,返回b,第三次,返回c,第四次,它返回一個。ConcurrentHashMap上的元素循環法
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異常不斷坡平了,我想知道這是有什麼毛病,使用元素()方法?如果不合適,我應該調整哪些實施?謝謝!
的異常跟蹤如下:
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)
我們可以看到異常報告嗎? – tbodt
當然@tbodt,我在帖子中包含了這個報告 –
剛纔意識到,如果你的hashmap是空的,就會發生這個異常。僅僅因爲你枚舉並不意味着它有一個項目。 –