J-C-04 JMM 작업 메모리 동기화와 volatile의 진짜 의미 그리고 가상 스레드까지

글 정보
카테고리
Programming/Java/Core
태그
JavaLevel2

왜 작업 메모리 동기화가 문제의 시작인가

일반 변수가 동기화되는 대표 시점들

작업 메모리 변화가 즉시 반영되지 않는다는 말의 정확한 뜻

스레드 시작과 종료에서의 동기화 이해하기

Thread.start가 보장하는 것

Thread.join이 보장하는 것

디버거와 println이 동기화를 만들어 보이는 이유

브레이크포인트를 걸면 동기화된다 문제

System.out.println이 동기화를 유발한다 문제

volatile과 메모리 가시성

volatile이 해주는 것

volatile이 해주지 못하는 것

volatile의 성능 설명 보정

예시 종료 플래그

class StopFlagExample {
    private static volatile boolean stop = false;
    public static void main(String[] args) throws Exception {
        Thread t = new Thread(() -> {
            while (!stop) {
                // busy work
            }
        });
        t.start();
        Thread.sleep(100);
        stop = true;
        t.join();
    }
}

C C++의 volatile과 Java의 volatile은 같지 않다

경쟁 조건 Race Condition 정리

Race condition이란

왜 고급언어 한 줄이 위험한가

예시 count++ 경쟁

class Race {
    static int count = 0;
    static void inc() {
        count++; // read, add, write
    }
}

스레드 동기화와 OS 동기화 객체

중량 락이 무거운 이유를 정확히 말하면

Spin Lock 설명 정리

가상 스레드 Virtual Thread를 동기화 관점에서 보기

가상 스레드가 나온 배경

가상 스레드의 핵심 아이디어

가상 스레드가 있다고 동기화가 필요 없어지나

최종 정리