ConcurrentModificationException объектіге рұқсат етілмеген кезде бір мезгілде өзгертуге әрекеттенгенде орын алады. Бұл ерекшелік әдетте Java Collection сыныптарымен жұмыс істегенде пайда болады. Мысалы - Жиынның үстінде басқа ағын қайталанатын кезде ағынның Жинақты өзгертуіне рұқсат етілмейді.
Бір мезгілде өзгерту ерекшелігін қалай түзетемін?
Біз сондай-ақ бір ағынды ортада бір мезгілде өзгертуді болдырмауға болады. Объектіні негізгі жинақ нысанынан жою үшін Итератордың жою әдісін пайдалана аламыз. Бірақ бұл жағдайда тізімнен басқа нысанды емес, бір ғана нысанды жоюға болады.
Картадағы бір мезгілде өзгерту мүмкіндігін қалай болдырмауға болады?
пайдаланыңыз ConcurrentHashMap. Қарапайым HashMap қолданбасын пайдалануды жалғастырыңыз, бірақ әр модификацияда жаңа карта жасаңыз және сахнаның артындағы карталарды ауыстырыңыз (ауыстырғыш әрекетін синхрондау немесе AtomicReference арқылы)
Қандай итератор әдісі бір мезгілде өзгертуге ерекше жағдай жасайды?
Егер біз оның келісім-шартын бұзатын нысанда әдістер тізбегін шақырсақ, онда нысан ConcurrentModificationException шығарады. Мысалы: егер жинақты қайталау кезінде біз сол жинақты тікелей өзгертуге әрекеттенсек, онда берілген fail-fast итератор осы ConcurrentModificationException шығарады.
Java стек толып кетуіндегі бір мезгілде өзгерту ерекшелігі қандай?
Егер бір ағын нысанның келісімін бұзатын әдісті шақырулар тізбегін шығарса, нысаны бұл ерекшелікті шығаруы мүмкін. Мысалы, егер ағын сәтсіз итератор көмегімен жинақты қайталау кезінде жинақты тікелей өзгертсе, итератор бұл ерекшелікті шығарады.