Ինչու է առաջանում միաժամանակյա փոփոխության բացառությունը Java-ում:

Ինչու է առաջանում միաժամանակյա փոփոխության բացառությունը Java-ում:
Ինչու է առաջանում միաժամանակյա փոփոխության բացառությունը Java-ում:
Anonim

Միաժամանակյա փոփոխության բացառությունը տեղի է ունենում, երբ օբյեկտը փորձում են միաժամանակ փոփոխել, երբ այն անթույլատրելի է: Այս բացառությունը սովորաբար տեղի է ունենում, երբ մեկն աշխատում է Java Collection դասերի հետ: Օրինակ – Անթույլատրելի է, որ շարանը փոփոխել Հավաքածուն, երբ որևէ այլ թեմա կրկնվում է դրա վրա:

Ինչպե՞ս կարող եմ ուղղել միաժամանակյա փոփոխության բացառությունը:

Մենք կարող ենք նաև խուսափել միաժամանակյա փոփոխության բացառությունից մեկ թելային միջավայրում: Մենք կարող ենք օգտագործել Iterator-ի հեռացման մեթոդը՝ օբյեկտը հիմքում ընկած հավաքածուի օբյեկտից հեռացնելու համար: Բայց այս դեպքում դուք կարող եք ցուցակից հեռացնել միայն նույն օբյեկտը և ոչ որևէ այլ առարկա:

Ինչպե՞ս կանխել միաժամանակ փոփոխման բացառությունը քարտեզի վրա:

օգտագործել ConcurrentHashMap: շարունակեք օգտագործել պարզ HashMap-ը, բայց յուրաքանչյուր փոփոխության վրա կառուցեք նոր քարտեզ և փոխեք քարտեզները կուլիսների հետևում (համաժամացնելով անջատիչի գործողությունը կամ օգտագործելով AtomicReference)

Իտերատորի ո՞ր մեթոդն է ստեղծում միաժամանակյա փոփոխության բացառություն:

Եթե մենք կանչում ենք մեթոդների հաջորդականություն օբյեկտի վրա, որը խախտում է իր պայմանագիրը, ապա օբյեկտը նետում է ConcurrentModificationException: Օրինակ՝ եթե հավաքածուի վրայով կրկնելիս մենք ուղղակիորեն փորձենք փոփոխել այդ հավաքածուն, ապա տրված fail-fast iterator կստեղծի այս ConcurrentModificationException:

Ո՞րն է միաժամանակյա փոփոխության բացառությունը Java stack overflow-ում:

Եթե մեկ շարանը թողարկում է մեթոդի կանչերի հաջորդականություն, որը խախտում է օբյեկտի պայմանագիրը, օբյեկտը կարող էբացառել այս բացառությունը: Օրինակ, եթե շարանը ուղղակիորեն փոփոխում է հավաքածուն, երբ այն կրկնվում է հավաքածուի վրա անհաջող կրկնողով, կրկնողն այս բացառությունը կանի:

Խորհուրդ ենք տալիս: