ერთდროული მოდიფიკაციის გამონაკლისი ჩნდება, როდესაც ობიექტის ერთდროულად შეცვლას ცდილობენ, როცა ის დაუშვებელია. ეს გამონაკლისი ჩვეულებრივ ხდება, როდესაც ადამიანი მუშაობს Java Collection კლასებთან. მაგალითად - ძაფისთვის დაუშვებელია კოლექციის შეცვლა, როდესაც მასზე სხვა ძაფები იმეორებს.
როგორ გამოვასწორო ერთდროული მოდიფიკაციის გამონაკლისი?
ჩვენ ასევე შეგვიძლია თავიდან ავიცილოთ ერთდროული მოდიფიკაციის გამონაკლისი ერთ ხრახნიან გარემოში. ჩვენ შეგვიძლია გამოვიყენოთ Iterator-ის წაშლის მეთოდი ობიექტის ძირითადი კოლექციის ობიექტიდან ამოსაღებად. მაგრამ ამ შემთხვევაში, თქვენ შეგიძლიათ ამოიღოთ მხოლოდ ერთი და იგივე ობიექტი და არა სხვა ობიექტი სიიდან.
როგორ თავიდან აიცილოთ ერთდროული მოდიფიკაციის გამონაკლისი რუკაზე?
გამოიყენეთ ConcurrentHashMap. გააგრძელეთ მარტივი HashMap-ის გამოყენება, მაგრამ შექმენით ახალი რუკა თითოეულ მოდიფიკაციაზე და შეცვალეთ რუკები კულისებში (გადართვის მოქმედების სინქრონიზაცია ან AtomicReference)
იტერატორის რომელი მეთოდი უშვებს ერთდროული მოდიფიკაციის გამონაკლისს?
თუ ჩვენ გამოვიყენებთ მეთოდების თანმიმდევრობას ობიექტზე, რომელიც არღვევს მის კონტრაქტს, მაშინ ობიექტი აგდებს ConcurrentModificationException-ს. მაგალითად: თუ კრებულზე გამეორებისას ჩვენ პირდაპირ ვცდილობთ ამ კრებულის შეცვლას, მაშინ მოცემული ჩავარდნის სწრაფი გამეორება ჩააგდებს ამ ConcurrentModificationException.
რა არის ერთდროული მოდიფიკაციის გამონაკლისი Java stack overflow-ში?
თუ ერთი თემა გამოსცემს მეთოდის გამოძახებების თანმიმდევრობას, რომელიც არღვევს ობიექტის კონტრაქტს, ობიექტმა შეიძლება გამოავლინოს ეს გამონაკლისი. მაგალითად, თუ თემა ცვლის კრებულს უშუალოდ მაშინ, როცა ის კრებულზე იტერაციებს მარცხის სწრაფი გამეორებით, იტერატორი ჩააგდებს ამ გამონაკლისს.