Java 동시성을 이해하는 데 있어 가장 중요한 개념은 happens-before다.하지만 happens-before는 “먼저 실행된다”거나 “순서가 보장된다”는 말로 자주 오해된다.이 글에서는 happens-before가 무엇을 보장하고, 무엇을 보장하지 않는지를 Java Language Specification 기준으로 정리한다.1. 왜 happens-before가 필요한가?멀티스레드 환경에서 다음 질문은 항상 따라온다.한 스레드에서 쓴 값은 언제 다른 스레드에서 보이는가?코드에 작성한 순서가 실제 실행 순서와 같은가?직관적으로는 “먼저 실행했으니, 먼저 보일 것” 처럼 느껴진다.하지만 실제로는CPU 캐시컴파일러 최적화JIT 재정렬때문에 이 직관은 쉽게 깨진다.happens-before는 이 혼란을 ..