I have method which has iterator. it sometimes give me ConcurrentModificationException. can anyone suggest me a better solution for this. This is my code
private void addRequest(HttpUriRequest request) {
Iterator<Entry<String, List<ComBase.OnReceiveListener<Entity>>>> iterator = ((Comm) _com)
.getReceiveListeners().entryset().iterator();
synchronized (iterator) {
StringBuilder builder = new StringBuilder();
boolean first = true;
while (iterator.hasNext()) {
Entry<String, List<ComBase.OnReceiveListener<Entity>>> entry = iterator.next();
if (entry.getValue() != null && entry.getValue().size() > 0) {
if (first) {
first = false;
} else {
builder.append(", ");
}
builder.append(entry.getKey());
}
}
request.setHeader(HttpHeaders.XAcceptEntities, builder.toString());
}
}
This is how my stack-race looks
02-24 16:22:38.601: E/Application(11567): at java.util.HashMap$EntryIterator.next(HashMap.java:827)
02-24 16:22:38.601: E/Application(11567): at org.example.abc.com.HttpTransport.addRequest(HttpTransport.java:222)
02-24 16:22:38.601: E/Application(11567): at org.example.abc.com.HttpTransport.createOperation(HttpTransport.java:161)
02-24 16:22:38.601: E/Application(11567): at org.example.abc.com.HttpTransport.orgndMessage(HttpTransport.java:109)
02-24 16:22:38.601: E/Application(11567): at org.example.abc.com.MessagePoller.queryMessage(QueueMessagePoller.java:36)
02-24 16:22:38.601: E/Application(11567): at org.example.abc.com.MessagePoller.worker(MessagePoller.java:23)
02-24 16:22:38.601: E/Application(11567): at org.example.abc.com.MessagePoller.access$1(MessagePoller.java:14)
02-24 16:22:38.601: E/Application(11567): at org.example.abc.com.MessagePoller$2.run(Poller.java:21)
02-24 16:22:38.601: E/Application(11567): at java.lang.Thread.run(Thread.java:856)