홈 › 고급 › 02 / 10

멀티스레드와 동기화

섹션 7진행 0 / 10

7. 정리

  1. 스레드는 스택은 따로, 힙은 공유한다. 동시성 버그는 전부 "힙의 공유 객체를 여러 스레드가 쓰기" 에서 나온다.
  2. count++ 는 읽기-계산-쓰기 3단계라 끼어들기가 가능하다(경쟁 조건). 해결은 공유 안 하기 / 원자화(Atomic, CAS) / 상호 배제(synchronized, Lock) 셋 중 하나.
  3. synchronized 는 원자성 + 가시성, volatile 은 가시성만. 데드락은 4조건이 모두 성립할 때만 나며, 락 순서 고정이 가장 실용적인 예방책이다.
  4. 스레드는 직접 만들지 말고 ExecutorService 로. submit 의 예외는 get() 해야 보이고, shutdown + awaitTermination(또는 try-with-resources) 로 반드시 종료한다.
  5. JDK 21 가상 스레드는 I/O 바운드 대량 작업에 쓰고, 풀링하지 않으며, CPU 작업엔 이득이 없다.

다음 레슨 03. 람다에서는 Runnable, Callable 처럼 이 레슨에서 이미 쓰고 있던 함수형 인터페이스의 정체와 람다가 어떻게 컴파일되는지 다룹니다.