Tag: concurrentmodification

使用iterator和iterator.remove()时出现ConcurrentModificationException

private int checkLevel(String bigWord, Collection dict, MinMax minMax) { /*value initialised to losing*/ int value = 0; if (minMax == MinMax.MIN) value = 1; else value = -1; boolean go = true; Iterator iter = dict.iterator(); while(iter.hasNext()) { String str = iter.next(); Collection inds = naiveStringSearch(bigWord, str); if(inds.isEmpty()) { iter.remove(); } for (Integer i : […]

Guava MultiMap和ConcurrentModificationException

我不明白为什么在迭代这个multimap时我得到一个ConcurrentModificationException。 我读了以下条目 ,但我不确定我是否理解了整个事情。 我试图添加一个synchronized块。 但我怀疑的是与什么同步,何时。 multimap是一个字段,创建如下: private Multimap eventMultiMap = Multimaps.synchronizedMultimap(HashMultimap. create()); 并像这样使用: eventMultiMap.put(event, command); 并且像这样(我试图在地图上同步这部分,但没有成功) for (Entry entry : eventMultiMap.entries()) { if (entry.getValue().equals(command)) { eventMultiMap.remove(entry.getKey(), entry.getValue()); nbRemoved++; } }

带迭代器的java.util.ConcurrentModificationException

我知道如果试图通过简单的循环从集合中删除循环,我将得到这个exception: java.util.ConcurrentModificationException 。 但我正在使用Iterator,它仍然会产生这个exception。 知道为什么以及如何解决它? HashSet tableRecords = new HashSet(); … for (Iterator iterator = tableRecords.iterator(); iterator.hasNext(); ) { TableRecord record = iterator.next(); if (record.getDependency() == null) { for (Iterator dependencyIt = tableRecords.iterator(); dependencyIt.hasNext(); ) { TableRecord dependency = dependencyIt.next(); //Here is the line which throws this exception if (dependency.getDependency() != null && dependency.getDependency().getId().equals(record.getId())) { […]

为什么it.next()抛出java.util.ConcurrentModificationException?

final Multimap terms = getTerms(bq); for (Term t : terms.keySet()) { Collection C = new HashSet(terms.get(t)); if (!C.isEmpty()) { for (Iterator it = C.iterator(); it.hasNext();) { BooleanClause c = it.next(); if(c.isSomething()) C.remove(c); } } } 不是SSCCE,但你能闻到气味吗?

迭代修改exception同时迭代ArrayList

当我使用temp = iterator.next()时,sort方法会导致并发修改错误。 你能帮我解决并发修改错误吗? 我给了整个类的代码,但我只是尝试完成排序方法。 在此先感谢您的帮助。 我必须对arraylist中的所有数组进行排序。 package HashSet; import java.io.InputStream; import java.util.ArrayList; import java.util.Collections; import java.util.ListIterator; import java.util.Scanner; public class PhoneBook { int capacity = 10; private ArrayList[] buckets; public PhoneBook() { this(10); load(); } public PhoneBook(int size) { capacity = size; buckets = new ArrayList[size]; for (int i = 0; i < buckets.length; […]

ConcurrentModificationException(Java)

Exception in thread “main” java.util.ConcurrentModificationException Squash the PC dirties the room Violet. The room’s state is now dirty Lily the animal growls The Animal Lily left the room and goes to Green through the west door. at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793) at java.util.HashMap$KeyIterator.next(HashMap.java:828) at homework5.Room.critReactRoomStateChange(Room.java:76) at homework5.PC.play(PC.java:121) at homework5.Main.main(Main.java:41) Java Result: 1 这是我收到的错误。 我的方法看起来像 public void critReactRoomStateChange(String command, […]

在TreeSet上使用迭代器

情况:我有一个自定义对象的TreeSet,我也使用了自定义比较器。 我已经创建了一个在这个TreeSet上使用的迭代器。 TreeSet ts=new TreeSet(); Iterator itr=ts.iterator(); while(itr.hasNext()){ Custom c=itr.next(); //Code to add a new element to the TreeSet ts } 问题:我想知道如果我在while循环中向TreeSet添加一个新元素,那么新元素是否会立即排序。 换句话说,如果我在while循环中添加一个新元素并且它小于我当前在c中保存的元素,那么在下一次迭代中我将获得与上一次迭代中相同的元素吗?(因为在排序之后,新添加的元素将占据当前元素之前的某个位置。

如何处理ConcurrentModificationException

我从冷却计时器得到一个ConcurrentModificationException。 我使用线程每秒减少值,如下所示: public class CoolDownTimer implements Runnable { @Override public void run() { for (String s : playerCooldowns.keySet()) { playerCooldowns.put(s, playerCooldowns.get(s) – 20); if (playerCooldowns.get(s) <= 0) { playerCooldowns.remove(s); } } } } 所以每一秒都应该将每个玩家的冷却时间减少20,但问题是我在运行程序时每隔几个小时就会获得一次CME,特别是当很多人在线时。 如何使它如果仍在修改列表,它将等到当前操作完成并创建一种修改队列? 谢谢! 这是堆栈跟踪: 2012-06-18 20:59:05 [WARNING] Task of ‘SurvivorsClasses’ generated an exception java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextEntry(HashMap.java:839) at java.util.HashMap$KeyIterator.next(HashMap.java:874) at me.zachoooo.survivorclasses.CoolDownManager$CoolDownTimer.run(CoolDownManager.java:13) at org.bukkit.craftbukkit.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:126) […]

为什么这段代码不会导致ConcurrentModificationException?

我正在阅读有关ConcurrentModificationException以及如何避免它的内容。 找到一篇文章 。 该文章中的第一个列表的代码类似于以下内容,这显然会导致exception: List myList = new ArrayList(); myList.add(“January”); myList.add(“February”); myList.add(“March”); Iterator it = myList.iterator(); while(it.hasNext()) { String item = it.next(); if(“February”.equals(item)) { myList.remove(item); } } for (String item : myList) { System.out.println(item); } 然后它继续解释如何用各种建议解决问题。 当我试图重现它时,我没有得到例外! 为什么我没有得到例外?