Perché in Java si verifica un'eccezione di modifica simultanea?

Sommario:

Perché in Java si verifica un'eccezione di modifica simultanea?
Perché in Java si verifica un'eccezione di modifica simultanea?
Anonim

L'eccezione ConcurrentModification si verifica quando si tenta di modificare un oggetto contemporaneamente quando non è consentito. Questa eccezione di solito si verifica quando si lavora con le classi Java Collection. Ad esempio - Non è consentito che un thread modifichi una Collection quando qualche altro thread sta iterando su di esso.

Come posso correggere l'eccezione di modifica simultanea?

Possiamo anche evitare l'eccezione di modifica simultanea in un singolo ambiente a thread. Possiamo usare il metodo remove di Iterator per rimuovere l'oggetto dall'oggetto raccolta sottostante. Ma in questo caso, puoi rimuovere solo lo stesso oggetto e non qualsiasi altro oggetto dall'elenco.

Come si impedisce l'eccezione di modifica simultanea su una mappa?

usa ConcurrentHashMap. continua a usare HashMap semplice, ma costruisci una nuova mappa su ogni modifica e cambia le mappe dietro le quinte (sincronizzando l'operazione di cambio o usando AtomicReference)

Quale metodo di iteratore genera un'eccezione di modifica simultanea?

Se invochiamo una sequenza di metodi su un oggetto che viola il suo contratto, l'oggetto genera ConcurrentModificationException. Ad esempio: se durante l'iterazione sulla raccolta, proviamo direttamente a modificare quella raccolta, il dato iteratore fail-fast genererà questa ConcurrentModificationException.

Qual è l'eccezione di modifica simultanea nell'overflow dello stack Java?

Se un singolo thread emette una sequenza di invocazioni di metodi che viola il contratto di un oggetto, l'oggetto può generare questa eccezione. Ad esempio, se un thread modifica una raccolta direttamente mentre sta eseguendo un'iterazione sulla raccolta con un iteratore fail-fast, l'iteratore genererà questa eccezione.

Consigliato: