M
Maddin28
Gast
Moin
Ich habe ein kleines Problem mit einer HashMap. Also in meine HashMap zuletztgesehen werden UUIDs von Clients eingetragen, soweit sogut, alles klappt wunderbar.
So nun hab ich nen Thread gemacht, welcher jede Sekunde alle Werte dieser HashMap überprüft und ggf. einen oder mehrere dieser Einträge der HashMap rauslöscht.
Ok, das Ganze geht solange gut, solange Werte nacheinander rausgelöscht werden. Wenn es sich bei dem zu löschenden Eintrag um den 2ten von 3 z.B. handelt, wird zunächst ordungsgemäß gelöscht, dann jedoch kommt die HashMap durcheinander und gibt mir folgende Fehlermeldung aus!
Ich schätze mal, dass man das problem beheben könnte, indem man nach dem Löschen mit break die Schleife abbricht. Das ist aber nicht das, was ich möchte, denn das würde ja heißen, dass pro Sekunde (solange wartet der Thread bis die Überprüfung von vorne beginnt) nur ein Client vom HashMap genommen wird. Das sollte aber nicht sein!
Bin für jeden Tip dankbar!
Gruß[/code]
Ich habe ein kleines Problem mit einer HashMap. Also in meine HashMap zuletztgesehen werden UUIDs von Clients eingetragen, soweit sogut, alles klappt wunderbar.
So nun hab ich nen Thread gemacht, welcher jede Sekunde alle Werte dieser HashMap überprüft und ggf. einen oder mehrere dieser Einträge der HashMap rauslöscht.
Code:
for(UUID items : zuletztgesehen.keySet()) {
....
if (bedingung==true){
zuletztgesehen.remove(items);
}
}
Ok, das Ganze geht solange gut, solange Werte nacheinander rausgelöscht werden. Wenn es sich bei dem zu löschenden Eintrag um den 2ten von 3 z.B. handelt, wird zunächst ordungsgemäß gelöscht, dann jedoch kommt die HashMap durcheinander und gibt mir folgende Fehlermeldung aus!
Exception in thread "Thread-1" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:841)
at java.util.HashMap$KeyIterator.next(HashMap.java:877)
at Server2er$1.run(Server2er.java:80)
at java.lang.Thread.run(Thread.java:595)
Ich schätze mal, dass man das problem beheben könnte, indem man nach dem Löschen mit break die Schleife abbricht. Das ist aber nicht das, was ich möchte, denn das würde ja heißen, dass pro Sekunde (solange wartet der Thread bis die Überprüfung von vorne beginnt) nur ein Client vom HashMap genommen wird. Das sollte aber nicht sein!
Bin für jeden Tip dankbar!
Gruß[/code]