27 Haziran 2018 Çarşamba

LongAdder Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.util.concurrent.atomic.LongAdder;
Açıklaması şöyle. İstatistik toplamak için çok kullanışlı bir sınıf. AtomicLong sınıfına tercih edilebilir
This class is usually preferable to AtomicLong when multiple threads update a common sum that is used for purposes such as collecting statistics, not for fine-grained synchronization control. Under low update contention, the two classes have similar characteristics. But under high contention, expected throughput of this class is significantly higher, at the expense of higher space consumption.
- Artı tarafı çok fazla thread'in increment() veya decrement() yaptığı bir ortamda AtomicLong'dan daha iyi performans sağlıyor, 
- Eksi tarafı AtomicLong'dan daha fazla bellek kullanıyor

Neden Daha İyi Performans Sağlıyor?
Açıklaması şöyle
But in a nutshell LongAdder extends Striped64 that handles contentation quit well by using hash table of cells. So when 2 threads try to put some value ,then there is good probability that both of them will end putting value in different cells. Cell class uses Padding stratergy to reduce CPU cache contentation. Moreover if you take a look on source code then you will find that cell class uses CAS.
constructor
Şöyle yaparız.
LongAdder longAdder = new LongAdder();
decrement metodu
Şöyle yaparız.
longAdder.decrement();
increment metodu
Şöyle yaparız.
longAdder.increment();
reset metodu
Şöyle yaparız.
longAdder.reset();
sum metodu
Şöyle yaparız.
System.out.printf("(LongAdder) count: %d\n", longAdder.sum());





Hiç yorum yok:

Yorum Gönder