Junior — Middle
Java'da ConcurrentModificationException istisnosining yuzaga kelishi nima va qaysi holatlarda chiqarilishi mumkin?
sobes.tech AI
AIdan javob
Java'da ConcurrentModificationException istisnası, koleksiyon üzerinde yineleme sırasında koleksiyonun yapısal bir değişikliğinin (örneğin, öğe ekleme veya kaldırma) doğrudan koleksiyon metodlarıyla değil, yineleyici kullanmadan yapılması durumunda ortaya çıkar. Bu fail-fast mekanizması, potansiyel olarak tehlikeli değişiklikler hakkında uyarır ve yineleyicinin hatalı çalışmasına neden olabilir.
Bu istisna genellikle şu durumlarda atılır:
- Bir
ArrayListüzerindeIteratorkullanılarak yineleme yapılırken, döngü içindelist.remove()doğrudan çağrılır,iterator.remove()yerine. - Yineleme sırasında başka bir iş parçacığından koleksiyon değiştirilir ve uygun senkronizasyon yapılmaz.
Örnek:
List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
for (String s : list) {
if (s.equals("b")) {
list.remove(s); // ConcurrentModificationException atar
}
}
Yineleme sırasında güvenli silme yöntemi:
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String s = iterator.next();
if (s.equals("b")) {
iterator.remove(); // güvenli
}
}