Atomic Type이란?
CAS 알고리즘을 사용해 동시성을 보장하는 Wrapping 자료형입니다.
Atomic 타입은 어떻게 동시성을 보장할까?
Atomic타입이 동시성을 어떻게 보장하는지 이해하려면 CAS 알고리즘에 대해 이해해야 합니다.
CAS 알고리즘은 Compare And Swap 알고리즘으로 알고리즘 흐름도는 아래 그림과 같습니다.
멀티스레드 환경에서는 CPU가 메모리에서 변수값을 참조하는게 아니라 CPU의 캐시 영역에서 값을 참조하게 됩니다. 이 때, 메모리에 저장된 값과 CPU캐시에 저장된 값이 서로 다를 수 있습니다(가시성 문제). CAS 알고리즘은 현재 스레드에 저장된 값과 메모리에 저장된 값을 비교한 후 일치하면 새로운 값으로 교체하고, 일치하지 않는다면 실패하고 재시도하는 방식으로 가시성 문제를 해결합니다. 이렇게 하면 캐시에서 잘못된 값을 참조하는 일이 생기지 않습니다.
Atomic type
은 synchronized
와 마찬가지로 여러 스레드에서 read와 write가 가능하며,lock
을 걸지 않기 때문에 synchronized
에 비해 성능이 우수합니다.
'Java' 카테고리의 다른 글
블로킹 큐(Blocking Queue) (0) | 2020.08.22 |
---|