-1

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); 
     } 
    } 
+0

Ihr [mcve] bitte. –

+0

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

+2

Ich wette, Sie ändern buffer_List in to_Shared_Queue Methode. – MGorgon

Antwort

-2

Es ist wegen dir Iterator zu modifizieren, während darüber Looping. Sie können es tun, indem Sie es aus Ihrem Array buffer_List entfernen. buffer_List.remove (temp_str1);

+1

Dies scheint das genaue Gegenteil von dem zu sein, was wir empfehlen. –

Verwandte Themen