19 Ekim 2020 Pazartesi

ConcurrentHashMap.merge metodu - Atomic Metod

merge metodu - key + value + BiFunction
Bu metod Java 8 ile geldi. İlklendirme veya yeni değer hesaplama içindir.

compute() ve merge() ile Farkı
compute() metodu da aynı merge() gibidir. Eğer ilk değeri yoksa merge() ikinci parametre olarak belirtilen değeri kullanır. compute() ise ilk değer yoksa ikinci parametre olarak verilen BiFunction sonucunu kullanır.

Örnek
Şöyle yaparız. Anahtar yoksa, key,value=1 olarak ekler. Anahtar mevcutsa verilen BiFunction çalıştırılır.
private Integer somefunction() {
  return cache.merge(key, 1, Integer::sum);
}
Örnek
Şöyle yaparız. Çıktı olarak "GERB: 116" alırız
Map<String, Integer> voting = new ConcurrentHashMap<>();

for (int i = 0; i < 16; i++)
    new Thread(() -> {
        voting.merge("GERB", 1, Integer::sum);
    }).start();

for (int i = 0; i < 100; i++)
    voting.merge("GERB", 1, Integer::sum);

Thread.sleep(5000); // Waits for the threads to finish

for (String s : voting.keySet())
    System.out.println(s + ": " + voting.get(s));

Hiç yorum yok:

Yorum Gönder