ConcurrentHashMap'in forEach yöntemi iş parçacığı için güvenli midir? [çiftleme]

Jan 05 2021

ConcurrentHashMap'teki tüm öğeler üzerinde yineleme yapmak istiyorsanız, forEachiş parçacığı güvenli yöntemi kullanıyor musunuz?

Yanıtlar

1 JohnKugelman Jan 05 2021 at 11:08

İş parçacığı güvenli ile ne demek istediğine bağlı.

  • Bir forEacharamanı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 forEachdevam 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.