-1

私はこの単純なワーカースレッドを作成して、ArrayListを反復処理することで回文を計算しました。 temp_str1 = it.next();行を実行するとエラーが発生します。 ArrayListのbuffer_Listは他のスレッドで使用されていないため、synchronizedブロックを使用しても役立ちません。私は以前の質問を見て、彼らはあまり役に立たなかった。私はこの問題の解決策を見つけることを熱望しています。iterator.next()内のConcurrentModificationExceptionマルチスレッド

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

編集コード:to_Shared_Queue

private void to_Shared_Queue(String str){   
     synchronized(shared_queue){ 
      Shared_queue.add(str); 
     } 
    } 
+0

あなたの[mcve]してください。 –

+0

この男の答えを見て、あなたを助けるかもしれません。これは、ArrayListから項目を削除するために使用するremoveメソッドです。 http://stackoverflow.com/questions/15993356/how-iterators-remove-method-actually-remove-an-object – kevto

+2

to_Shared_Queueメソッドでbuffer_Listを変更しています。 – MGorgon

答えて

-2

を追加したことが原因で、それをループしながら、あなたはイテレータを変更するのである

は、ここに私のコードです。あなたは配列buffer_Listからそれを削除することでそれを行うことができます。 buffer_List.remove(temp_str1);

+1

これは私たちが推奨するものとまったく逆のようです。 –

関連する問題