避免對名單ConcurrentModificationException的我有類似下面的類:通過使淺拷貝
class Test
{
private LinkedList<Person> persons = new LinkedList<Person>;
public synchronized void remove(Person person)
{
persons.remove(person);
}
public List<Person> getAllPersons()
{
// Clients may iterate over the copy returned and modify the structure.
return new ArrayList<Person>(persons);
}
}
persons
可以同時修改:通過由getAllPersons()
返回的淺複製的實例是通過remove()
由一個線程和兩個。
我已經在多線程環境中測試了上述場景,以便在調用getAllPersons()
時通過返回淺拷貝來避免ConcurrentModificationException
。它似乎工作。我從未遇到過ConcurrentModificationException
。
爲什麼在這種情況下,只做persons
的淺拷貝避免ConcurrentModificationException
?
http://stackoverflow.com/questions/19384056/how-to-concurrently-modify-a-vector/19384832?noredirect=1#comment28729008_19384832 –