Միաժամանակյա փոփոխության բացառությունը տեղի է ունենում, երբ օբյեկտը փորձում են միաժամանակ փոփոխել, երբ այն անթույլատրելի է: Այս բացառությունը սովորաբար տեղի է ունենում, երբ մեկն աշխատում է Java Collection դասերի հետ: Օրինակ – Անթույլատրելի է, որ շարանը փոփոխել Հավաքածուն, երբ որևէ այլ թեմա կրկնվում է դրա վրա:
Ինչպե՞ս կարող եմ ուղղել միաժամանակյա փոփոխության բացառությունը:
Մենք կարող ենք նաև խուսափել միաժամանակյա փոփոխության բացառությունից մեկ թելային միջավայրում: Մենք կարող ենք օգտագործել Iterator-ի հեռացման մեթոդը՝ օբյեկտը հիմքում ընկած հավաքածուի օբյեկտից հեռացնելու համար: Բայց այս դեպքում դուք կարող եք ցուցակից հեռացնել միայն նույն օբյեկտը և ոչ որևէ այլ առարկա:
Ինչպե՞ս կանխել միաժամանակ փոփոխման բացառությունը քարտեզի վրա:
օգտագործել ConcurrentHashMap: շարունակեք օգտագործել պարզ HashMap-ը, բայց յուրաքանչյուր փոփոխության վրա կառուցեք նոր քարտեզ և փոխեք քարտեզները կուլիսների հետևում (համաժամացնելով անջատիչի գործողությունը կամ օգտագործելով AtomicReference)
Իտերատորի ո՞ր մեթոդն է ստեղծում միաժամանակյա փոփոխության բացառություն:
Եթե մենք կանչում ենք մեթոդների հաջորդականություն օբյեկտի վրա, որը խախտում է իր պայմանագիրը, ապա օբյեկտը նետում է ConcurrentModificationException: Օրինակ՝ եթե հավաքածուի վրայով կրկնելիս մենք ուղղակիորեն փորձենք փոփոխել այդ հավաքածուն, ապա տրված fail-fast iterator կստեղծի այս ConcurrentModificationException:
Ո՞րն է միաժամանակյա փոփոխության բացառությունը Java stack overflow-ում:
Եթե մեկ շարանը թողարկում է մեթոդի կանչերի հաջորդականություն, որը խախտում է օբյեկտի պայմանագիրը, օբյեկտը կարող էբացառել այս բացառությունը: Օրինակ, եթե շարանը ուղղակիորեն փոփոխում է հավաքածուն, երբ այն կրկնվում է հավաքածուի վրա անհաջող կրկնողով, կրկնողն այս բացառությունը կանի: