Sobes.tech
Junior — Middle

Кадом усулҳоро метавон барои пешгирии истиснои ConcurrentModificationException дар вақти кор бо коллексияҳо дар муҳити бисёрсоҳавӣ истифода бурд?

sobes.tech AI

Ҷавоб аз AI

Мултитред муҳитида коллекциялар билан ишлашда ConcurrentModificationException хатоини олдини олиш учун қуйидаги усуллардан фойдаланиш мумкин:

  • java.util.concurrent пакетидаги тўғри ишлайдиган коллекциялардан фойдаланинг, масалан, ConcurrentHashMap, CopyOnWriteArrayList.
  • Коллекцияга киришни қўл билан synchronized блоклари ёки бошқа синхронлаштириш механизмлари орқали синхронлаштиринг.
  • Бехатар ўзгартиришни қўллаб-қувватлайдиган итераторлардан фойдаланинг, масалан, ListIterator листлар учун.
  • Итерация вақтида асосий коллекцияни ўзгартирмаслик учун коллекциялар нусхаларини яратинг (масалан, new ArrayList<>(асосийРўйхат)), шу билан асосий коллекция ўзгартиришларидан ҳимояланг.

CopyOnWriteArrayListдан фойдаланиш мисоли:

CopyOnWriteArrayList<String> рўйхат = new CopyOnWriteArrayList<>();
рўйхат.add("item1");
for (String item : рўйхат) {
    рўйхат.add("item2"); // бу ConcurrentModificationException келтирмайди
}