The ConcurrentModificationException vind plaas wanneer probeer word om 'n voorwerp gelyktydig gewysig te word wanneer dit nie toelaatbaar is nie. Hierdie uitsondering kom gewoonlik wanneer 'n mens met Java Collection-klasse werk. Byvoorbeeld - Dit is nie toelaatbaar vir 'n draad om 'n versameling te wysig wanneer 'n ander draad daaroor herhaal nie.
Hoe maak ek gelyktydige wysigingsuitsondering reg?
Ons kan ook die Gelyktydige Modifikasie-uitsondering vermy in 'n enkele skroefdraad-omgewing. Ons kan die verwyderingsmetode van Iterator gebruik om die voorwerp van die onderliggende versamelingsvoorwerp te verwyder. Maar in hierdie geval kan jy net dieselfde voorwerp en nie enige ander voorwerp van die lys verwyder nie.
Hoe voorkom jy gelyktydige wysigingsuitsondering op 'n kaart?
gebruik ConcurrentHashMap. hou aan om eenvoudige HashMap te gebruik, maar bou 'n nuwe kaart op elke wysiging en wissel kaarte agter die skerms (sinchroniseer die skakeloperasie of gebruik AtomicReference)
Watter metode van iterator gooi gelyktydige wysigingsuitsondering?
As ons 'n reeks metodes op 'n voorwerp aanroep wat sy kontrak oortree, dan gooi die voorwerp ConcurrentModificationException. Byvoorbeeld: as ons, terwyl ons oor die versameling itereer, direk probeer om daardie versameling te wysig, dan sal die gegewe fail-fast iterator hierdie ConcurrentModificationException gooi.
Wat is die gelyktydige wysigingsuitsondering in Java-stapeloorloop?
As 'n enkele draad 'n reeks metode-aanroepe uitreik wat die kontrak van 'n voorwerp oortree, kan die voorwerp hierdie uitsondering gooi. Byvoorbeeld, as 'n draad 'n versameling direk wysig terwyl dit oor die versameling herhaal word met 'n mislukte iterator, sal die iterator hierdie uitsondering gooi.