Można myśleć o drabinie kosztów za:
- zwykły
long
: tanie, ale niebezpieczne dla wielowątkowych dostępu
volatile long
: operacje droższe, bezpieczne dla wielowątkowych dostępu atomowych niemożliwe
AtomicLong
: najdroższe, bezpieczne dla wielowątkowych dostępu, możliwe operacje atomowe
(Whe n Mówię "niebezpieczny" lub "niemożliwy", mam na myśli "bez zewnętrznego mechanizmu, takiego jak synchronizacja" oczywiście.)
W przypadku, gdy wymagany jest dostęp wielowątkowy, ale większość operacji to proste odczyty lub zapisy, z wystarczy kilka operacji atomowych, możesz utworzyć jedną instancję statyczną o numerze AtomicLongFieldUpdate
i użyć jej, gdy potrzebne są aktualizacje atomowe. Narzut pamięci/środowiska wykonawczego jest wówczas podobny do prostej zmiennej volatile
, z wyjątkiem operacji atomowych, które są rzędu (lub nieco droższe niż) operacji zwykłych AtomicLong
.
Oto nice little tutorial.
Nie odpowiada to na pytanie dotyczące "AtomicLongFieldUpdate". – Gray