Miks esineb Javas samaaegse muutmise erand?

Miks esineb Javas samaaegse muutmise erand?
Miks esineb Javas samaaegse muutmise erand?
Anonim

ConcurrentModificationException ilmneb siis, kui objekti üritatakse samaaegselt muuta, kui see pole lubatud. See erand tuleb tavaliselt siis, kui töötate Java Collection klassidega. Näiteks – lõimel ei ole lubatud kogu muuta, kui mõni teine lõim selle üle itereerib.

Kuidas parandada samaaegse muutmise erandit?

Saame vältida ka samaaegse muutmise erandit ühes keermestatud keskkonnas. Objekti eemaldamiseks aluseks olevast koguobjektist saame kasutada Iteratori eemaldamismeetodit. Kuid sel juhul saate loendist eemaldada ainult sama objekti, mitte ühtegi teist objekti.

Kuidas vältida samaaegset muutmise erandit kaardil?

kasuta ConcurrentHashMap. jätkake lihtsa HashMapi kasutamisega, kuid looge igale modifikatsioonile uus kaart ja vahetage kaarte kulisside taga (lüliti toimingu sünkroonimine või AtomicReference kasutamine)

Milline iteraatori meetod teeb samaaegse muutmise erandi?

Kui kutsume objektil välja meetodite jada, mis rikub selle lepingut, viskab objekt ConcurrentModificationException. Näiteks: kui kogu itereerimise ajal proovime seda kogu otse muuta, siis antud fail-fast iterator viskab selle ConcurrentModificationException.

Mis on samaaegse muutmise erand Java pinu ületäites?

Kui üks lõim väljastab meetodi kutsete jada, mis rikub objekti lepingut, võib objekt selle erandi teha. Näiteks kui lõim muudab kogu otse, kui see itereerib kogu tõrkekiire iteraatoriga, teeb iteraator selle erandi.

Soovitan: