무단 도용 및 복제, 사용 저작권 안내
수업 목적 외에 모든 교안 자료를 무단으로 도용 (URL 연결, 복제, 공유),
불법으로 복사하여 배포하는 것을 금지합니다. 꼭 지켜주세요!
본 강좌에서는 자바의 쓰레드 동기화에 대해 살펴보겠습니다!
1. 학습 목표
쓰레드 동기화에 대해 살펴보고 활용법을 본다.
2. 학습 내용
•
임계영역
•
동기화
3. 임계영역
•
동시의 여러 개의 쓰레드가 특정 소스코드 혹은 메서드를 동시에 접근 할 경우 해당 메서드를 서로 사용하려고 하는데 이처럼 여러 개의 쓰레드가 동시에 접근 할 수 있는 코드 영역 혹은 메서드를 임계 영역이라고 부른다.
•
프로그램에서 임계 영역이 있을 경우 프로그램 전체의 심각한 오류를 발생 시킬 수도 있다.
•
자바에서는 동기화를 통해 이러한 부분을 해결할 수 있다.
4. 동기화
•
동기화
◦
동기화를 하게 되면 임계영역 때문에 발생되는 문제를 막아 줄 수 있다.
◦
동기화를 하게 되면 쓰레드가 접근하는 순서대로 코드를 처리하고 늦게 도착하는 쓰레드는 기다 렸다가 먼저 도착한 쓰레드의 작업이 완료가 되면 다음 쓰레드가 작업을 하게 된다.
◦
동기화는 메서드를 동기화 하는 방법과 코드의 일부분을 동기화 하는 방법으로 나눠진다.
•
메서드의 동기화
◦
여러 개의 쓰레드가 호출하는 메서드가 있다고 한다면 메서드의 코드는 임계영역에 해당한다.
◦
이런 경우에는 메서드 전체를 동기화 하면되는데 다음과 같이 작성해 주면된다.
public synchronized void method() {
임계영역 코드
}
Java
복사
•
코드의 동기화
◦
Run 메서드의 코드 일부분을 동기화 하고자 할 때는 임계 영역에 해당하는 코드 부분을 synchronized 블록으로 묶어 주면 된다.
synchronized(클래스 혹은 객체) {
임계영역 코드
}
Java
복사
5. 학습 정리
정리
•
여러 개의 쓰레드가 메서드 혹은 특정 코드를 같이 사용하는 것을 임계 영역이라고 부른다.
•
임계 영역으로 인해 발생되는 오류를 방지하기 위해서는 동기화를 해주면 된다.