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