Как избежать исключения 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);
    }
}

person могут быть изменены одновременно: один - через remove () by один поток и два через неглубокий скопированный экземпляр, возвращенный getAllPersons () .

Я протестировал вышеупомянутый сценарий в многопоточной среде, чтобы увидеть, могу ли я избежать ConcurrentModificationException , вернув исключение мелкое копирование при вызове getAllPersons () . Казалось, сработало. Я ни разу не встречал исключения ConcurrentModificationException .

Почему в этом случае создание только поверхностной копии лиц позволяет избежать исключения ConcurrentModificationException ?

5
задан Alex 4 January 2016 в 12:08
поделиться