본문 바로가기
Java

[Java] 자바 쓰레드 동기화(Synchronize)

by 작은돼지 2022. 8. 1.

멀티쓰레드와 쓰레드 동기화

멀티쓰레드 환경은 다수의 실행 흐름이 병렬적으로 작업을 처리할 수 있어서 속도와 효율성이 향상되는 장점이 있지만 공유 데이터에 동시에 접근이 일어나는 경우 예기치 못한 문제가 발생할 수 있다.

 

동기화(Synchronized)란

다수의 쓰레드가 하나의 공유 데이터에 접근하지 못하도록 잠금(Lock)을 하는 것이다.

 

동기화 처리를 하려면 메서드 선언부 또는 특정 코드 블럭{ } 앞에 synchronized 키워드를 추가한다.

public synchronized void m(){
	...
}
synchronized(...){
	...
}

이렇게 synchronized 키워드를 추가하여 동기화 처리를 할 수 있다.

 

쓰레드는 해당 동기화된 메서드 또는 코드블럭을 실행하기 전에 잠금을 요청하여 임계영역을 독점적으로 사용할 수 있다.

실행이 끝나면 잠금이 해제되고, 대기 중인 쓰레드들 중 하나가 다시 잠금을 요청하고 실행하게 된다.

 

무분별한 동기화는 성능 저하, 교착상태 등이 발생할 수 있으므로 적절하게 사용해야 한다.