Thread-Safe
멀티 스레드 환경에서 공유 자원에 여러 스레드가 접근이 이루어져도 프로그램이 정상적으로 동작하는 상태
synchronized
synchronized란?
lock을 통해 동기화를 수행하여 원자성 문제를 해결하는 키워드
문제점
한 스레드가 lock을 얻어서 임계 영역에 접근하면 해당 영역에 접근하고 싶은 모든 스레드가 blocking이 걸려 아무 일도 못하며 스레드 상태를 변경하는 비용때문에 성능이 좋지 않다.
- 성능 저하(락 대기)
- 데드 락
- 공정성 문제 -> 기아 상태(starvation)
동기화 매커니즘
- 모니터 락을 사용하여 스레드 간 동기화 제공
- 객체의 락은 한번에 하나의 스레드가 점유
임계 영역(Critical Section)
멀티스레드 환경에서 공유 자원에 접근하는 코드 블록
모니터
모니터는 스레드가 mutual exclusion와 cooperation를 가질 수 있도록 하는 동기화 메커니즘이다. 모니터라고 부르는 이유는 스레드가 리소스에 어떻게 접근(access)하는지 모니터링하기 때문이다.
상호배제? 협력?
- 상호 배제
- 공유 자원에 여러 스레드가 동시에 접근하지 못하도록 보장하는 매커니즘
- 데이터 무결설 보장
- 협력
- 여러 쓰레드가 작업을 수행하기 위해 서로 신호를 주고받거나 대기 상태를 조율하는 메커니즘
- 즉, 한 스레드가 특정 조건을 만족해야만 다른 스레드가 실행
꼬리 질문
모니터?
스레드 상태 변경?
뮤텍스? 세마포어?
wait()? notify()?
'외부활동 > JSCODE 자바' 카테고리의 다른 글
자바 3주차: 컬렉션 기초(작성 중) (0) | 2025.01.17 |
---|---|
자바 2주차: (작성 중) (0) | 2025.01.06 |
자바 1주차: 자바 객체 지향 (0) | 2025.01.03 |
자바 1주차: 자바 기본 (0) | 2025.01.03 |