Til
title: 2026-01-18 author: 강병호 (이름) date: 2026-01-18 (날짜) category: TIL/강병호/2026/01 (파일 경로 : TIL/{이름}/{연}/{월}) layout: post (자유) —
경쟁 상태(Race Condition) 는 두 개 이상의 스레드가 공유 자원에 동시에 접근할 때 스레드 간의 실행 순서에 따라 결과가 달라지는 현상으로, 원자성과 가시성 모두 보장되어야 해결할 수 있습니다.
원자성(Atomicity) 은 공유 자원에 대한 작업의 단위가 더 이상 쪼갤 수 없는 하나의 연산처럼 동작하는 성질을 의미합니다.
가시성(Visibility) 은 한 스레드에서 변경한 값이 다른 스레드에서 즉시 확인 가능한 성질을 의미합니다.
java에서 원자성과 가시성을 보장하기 위해 어떤 방법을 사용하는지?
원자성과 가시성을 모두 보장하려면 synchronized 키워드, CAS(Compare-And-Swap) 알고리즘을 사용하는 Atomic 클래스, ReentrantLock과 같은 lock 클래스, Concurrent Collections 등을 사용해서 동기화할 수 있습니다.
가시성만 보장하려면 volatile 키워드로 CPU 캐시를 사용하지 않고 메인 메모리에서 공유 자원을 직접 읽거나 쓸 수 있습니다. 이 때 하나의 스레드에서만 쓰기 작업을 수행하고, 나머지 스레드는 읽기 작업만 수행해야 합니다.