ConcurrentModificationException hatasinin ustesinden nasil gelinir?

sorucevap
  • Turgay Can
  • Tarih

    24 Sep, 2013
  • Yorum

    0
  • Görüntüleme

    1420
  • İndirme

    0

ConcurrentModificationException hatasinin ustesinden nasil gelinir?

ConcurrentModificationException hatasının üstesinden nasıl gelinir?

Bir List içindeki verileri for döngüsü içinde dönerken Liste içindeki değer üzerinde modifikasyon işlemi yapmaya çalıştığımızda ConcurrentModificationException hatasını alırız. Bunun sebebi ise, liste tek bir threadden kullanılabilir veya harici senkronizasyonla kullanılabilir bir nesnenin, eşzamanlı olarak değiştirilmeye çalışılmasıdır.Enes Kantepe(proje geliştirme arkadaşım), çözüm önerisi olarak Iterator'ı kullanmamızı önerdi. Kullandıkta, sorunun üstesinden geldi lakin, api'nin dökümentasyonunu okuduğumda aslında bu çözümünde nihai bir çözüm oladığını öğrenmiş oldum.

Dökümentasyon içinde, bu istisnanın aynı thread(iş parçacığı) haricinde farklı bir thread ile modifikasyon yaparkende oluşacağını belirtiyor. Iterator'ın sahip olduğu fail-fast davranışının bu sorun için bir çözüm olmadığını belirtiyor.

Kaynak

Çözüm yolları :

1 - ArrayList'i toArray() metodula bir diziye çevirip, üzerinde işlem yapabilirsiniz.

2 - ConcurrentHashMap ve CopyOnWriteArrayList sınıfları ile ek bir list içine istenilen veriler kopyalanabilir.(Bu çözümü bizde alternatif olarak konuşmuştuk)

3 - Iterator kullanmak bizim bulduğumuz çözüm ise tek bir thread üzerinde işlem yaparken kullanılabilir fakat aynı List sınıfını farklı thread 'ler ile etki edilecekse bu çözüm yetersiz kalacaktır.

Sağlıcakla,

Turgay Can

0 Yorum..

Yorum yapmak için "Giriş yapın" yada "Misafir üye" olarak yorum yapabilirsiniz.

Yorum Yap