Junior — Middle
Java'da ConcurrentModificationException istisnasının oluşması ne anlama gelir ve hangi durumlarda atılabilir?
sobes.tech yapay zeka
AI'dan gelen yanıt
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
}
}