스레드 동기화
동기화 : 동시에 데이터를 건들였을 때 데이터 처리를 순서를 정해 모든 데이터 처리를 받게 하는것
- 하나의 작업이 완료된 후 다른작업을 수행하는 것
비동기 - 하나의 작업의 완료여부와 상관없이 바로 다른 작업 명령을 수행하는 것
- 비동기 사용시, 동시에 같은 데이터를 사용할 경우 문제가 생길 수 있다.
동기화 방법
- 메서드 동기화
- 블록 동기화
메서드 동기화
- 메서드를 동기화할 때는 메서드의 리턴 타입 앞에 synchronized 키워드를 넣으면 된다.
synchronized 메서드명(){
}
블록 동기화
- 메서드 영역안에 일부분만 동기화가 필요할때 블록동기화를 사용
- 임의의 객체는 어떤 객체도 들어갈수 있지만 보통 this를 사용
synchronized (임의의 객체){
}
동기화의 원리
- 모든 객체는 자신만의 열쇠를 하나씩 가지고 있다.
- 동기화를 사용하면 처음 사용하는 스레드가 key값을 가진다.
- 다른 스레드는 먼저 사용 중인 스레드가 작업을 완료하고 key값을 반납할 때 까지 대기한다.
다른 키값 사용시, 연관성을 가지지 못해 동기화가 되지 않는다.
키값에 의한 동기화의 원리는 파악해야 함