TIPS
2025. 5. 26.
자바에서 volatile, synchronized, AtomicInteger 언제 써야 할까?
멀티스레드 프로그래밍을 하다 보면 volatile, synchronized, AtomicInteger 같은 키워드와 클래스들을 자주 보게 된다.하지만 그 차이를 제대로 이해하지 못하면, 동기화는 했는데도 값이 꼬이거나, 성능이 나빠지는 상황이 생길 수 있다.이 포스팅에서는 JVM 메모리 모델과 함께 이들 키워드의 차이점과 쓰임새를 정리해본다. 📌 자바 메모리 모델(JMM) 간단 정리멀티스레드 환경에서는 모든 스레드가 같은 변수를 바라보는 것처럼 보여도 실제로는 그렇지 않다.각 스레드는 CPU 캐시처럼 로컬 메모리를 가지고 있고,그 안에 변수 값을 복사해서 사용한다.이때 스레드 간 변경사항이 보이지 않을 수 있다 — 이게 바로 가시성(Visibility) 문제다.또한 CPU는 최적화를 위해 명령어의 순..