Kodėl „Java“pasitaiko lygiagrečio keitimo išimtis?

Kodėl „Java“pasitaiko lygiagrečio keitimo išimtis?
Kodėl „Java“pasitaiko lygiagrečio keitimo išimtis?
Anonim

ConcurrentModificationException įvyksta, kai objektą bandoma keisti vienu metu, kai tai neleistina. Ši išimtis dažniausiai pasitaiko dirbant su „Java Collection“klasėmis. Pavyzdžiui, gijai neleidžiama keisti kolekcijos, kai per ją kartojasi kita gija.

Kaip pataisyti vienu metu taikomo keitimo išimtį?

Taip pat galime išvengti lygiagrečiojo modifikavimo išimties vienoje srieginėje aplinkoje. Norėdami pašalinti objektą iš pagrindinio rinkinio objekto, galime naudoti Iterator pašalinimo metodą. Tačiau šiuo atveju iš sąrašo galite pašalinti tik tą patį objektą, o ne bet kurį kitą objektą.

Kaip išvengti vienu metu taikomų keitimų išimties žemėlapyje?

naudoti ConcurrentHashMap. toliau naudokite paprastą HashMap, bet sukurkite naują žemėlapį ant kiekvienos modifikacijos ir perjunkite žemėlapius užkulisiuose (sinchronizuokite jungiklio veikimą arba naudodami AtomicReference)

Kuris iteratoriaus metodas pateikia lygiagrečio modifikavimo išimtį?

Jei iškviečiame objekto, kuris pažeidžia jo sutartį, metodų seką, tada objektas meta ConcurrentModificationException. Pavyzdžiui: jei kartodami kolekciją mes tiesiogiai bandome modifikuoti tą rinkinį, tada nurodytas fail-fast iterator išmes šią ConcurrentModificationException.

Kas yra „Java“dėklo perpildymo vienu metu taikomų modifikacijų išimtis?

Jei viena gija pateikia metodų iškvietimų seką, kuri pažeidžia objekto sutartį, objektas gali mesti šią išimtį. Pavyzdžiui, jei gija tiesiogiai modifikuoja kolekciją, kol ji kartojasi per kolekciją su greitu iteratoriumi, iteratorius išmes šią išimtį.

Rekomenduojamas: