Ich habe diesen einfachen Worker-Thread erstellt, um Palindrome durch Iteration durch eine ArrayList zu berechnen. Ich bekomme einen Fehler, wenn ich Linie temp_str1 ausführen = it.next() ;. Die ArrayList buffer_List wird von keinem anderen Thread verwendet, daher hilft die Verwendung eines synchronisierten Blocks nicht. Ich habe frühere Fragen durchgesehen und sie haben mir nicht viel geholfen. Ich würde gerne die Lösung für dieses Problem finden.ConcurrentModificationException in iterator.next() Multithread
Hier ist mein Code:
private void find_Palindromes(ArrayList<String> buffer_List){
Iterator<String> it = buffer_List.iterator();
String temp_str1, temp_str2;
while(it.hasNext()){
temp_str1 = it.next();
//System.out.println(temp_str1);
it.remove();
if(is_Palindrome(temp_str1)){
to_Shared_Queue(temp_str1);
palin_count++;
}
}
}
bearbeiten Code: hinzugefügt to_Shared_Queue
private void to_Shared_Queue(String str){
synchronized(shared_queue){
Shared_queue.add(str);
}
}
Ihr [mcve] bitte. –
Schauen Sie sich die Antwort dieses Mannes an, die Ihnen vielleicht helfen könnte. Es ist die Remove-Methode, die Sie verwenden, um das Objekt aus der ArrayList zu entfernen. http://stackoverflow.com/questions/15993356/how-iterators-remove-method-actually-remove-an-object – kevto
Ich wette, Sie ändern buffer_List in to_Shared_Queue Methode. – MGorgon