ConcurrentModificationException زمانی رخ می دهد که یک شی به طور همزمان اصلاح شود در صورتی که مجاز نباشد. این استثنا معمولاً زمانی اتفاق میافتد که شخصی با کلاسهای مجموعه جاوا کار میکند. به عنوان مثال - برای یک رشته مجاز نیست یک مجموعه را هنگامی که رشته دیگری در حال تکرار است، تغییر دهد.
چگونه استثناء اصلاح همزمان را برطرف کنم؟
ما همچنین می توانیم از استثنای اصلاح همزمان در یک محیط رشته ای منفرد اجتناب کنیم. میتوانیم از روش حذف Iterator برای حذف شی از شی مجموعه زیرین استفاده کنیم. اما در این حالت، میتوانید فقط همان شی و نه هیچ شی دیگری را از لیست حذف کنید.
چگونه از استثنای اصلاح همزمان روی نقشه جلوگیری می کنید؟
استفاده از ConcurrentHashMap. به استفاده از HashMap ساده ادامه دهید، اما روی هر تغییر یک نقشه جدید بسازید و نقشه ها را در پشت صحنه تغییر دهید (همگام سازی عملیات سوئیچ یا استفاده از AtomicReference)
کدام روش تکرار کننده استثنای اصلاح همزمان را ایجاد می کند؟
اگر دنباله ای از متدها را روی شی ای فراخوانی کنیم که قرارداد آن را نقض می کند، آن شی ConcurrentModificationException را پرتاب می کند. به عنوان مثال: اگر در حین تکرار روی مجموعه، مستقیماً سعی کنیم آن مجموعه را تغییر دهیم، سپس تکرارکننده سریع شکست این ConcurrentModificationException را پرتاب می کند.
استثنای اصلاح همزمان در سرریز پشته جاوا چیست؟
اگر یک رشته واحد دنباله ای از فراخوانی های متد را صادر کند که قرارداد یک شی را نقض می کند، شی ممکن است این استثنا را ایجاد کند. به عنوان مثال، اگر یک رشته یک مجموعه را مستقیماً در حالی که در حال تکرار روی مجموعه با یک تکرار کننده سریع شکست است، تغییر دهد، تکرار کننده این استثنا را ایجاد می کند.