ConcurrentHashMap'in forEach yöntemi iş parçacığı için güvenli midir? [çiftleme]
ConcurrentHashMap'teki tüm öğeler üzerinde yineleme yapmak istiyorsanız, forEach
iş parçacığı güvenli yöntemi kullanıyor musunuz?
Yanıtlar
İş parçacığı güvenli ile ne demek istediğine bağlı.
- Bir
forEach
aramanın ortasındayken diğer iş parçacıklarının haritayı değiştirebilmesinde sorun yoksa , evet, iş parçacığı güvenlidir. - Haritanın
forEach
devam ederken değiştirilemez olmasını istiyorsanız, diğer iş parçacıkları engellenir veya değiştirmeye çalışırlarsa hata verirse, hayır değildir.
API belgeleri diyor ki:
Bununla birlikte, tüm işlemler iş parçacığı açısından güvenli olsa da, geri alma işlemleri kilitlemeyi gerektirmez ve tüm tabloyu tüm erişimi engelleyecek şekilde kilitlemek için herhangi bir destek yoktur.
...
Benzer şekilde Yineleyiciler, Bölücüler ve Numaralandırmalar, yineleyicinin / numaralandırmanın oluşturulmasında veya oluşturulmasından bu yana bir noktada karma tablonun durumunu yansıtan öğeler döndürür. Atmazlar
ConcurrentModificationException
.... Toplam durum yöntemlerinin sonuçlarının ... genellikle yalnızca bir harita diğer iş parçacıklarında eşzamanlı güncellemelere maruz kalmadığında yararlı olduğunu unutmayın. Aksi takdirde, bu yöntemlerin sonuçları, izleme veya tahmin amaçları için yeterli olabilecek ancak program kontrolü için uygun olmayan geçici durumları yansıtır.