私はこの単純なワーカースレッドを作成して、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);
}
}
あなたの[mcve]してください。 –
この男の答えを見て、あなたを助けるかもしれません。これは、ArrayListから項目を削除するために使用するremoveメソッドです。 http://stackoverflow.com/questions/15993356/how-iterators-remove-method-actually-remove-an-object – kevto
to_Shared_Queueメソッドでbuffer_Listを変更しています。 – MGorgon