У меня есть такой класс:
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);
}
}
person
могут быть изменены одновременно: один - через remove ()
by один поток и два через неглубокий скопированный экземпляр, возвращенный getAllPersons ()
.
Я протестировал вышеупомянутый сценарий в многопоточной среде, чтобы увидеть, могу ли я избежать ConcurrentModificationException
, вернув исключение мелкое копирование при вызове getAllPersons ()
. Казалось, сработало. Я ни разу не встречал исключения ConcurrentModificationException
.
Почему в этом случае создание только поверхностной копии лиц
позволяет избежать исключения ConcurrentModificationException
?