프로그래밍/JAVA

[Java] 스레드 동기화(Thread Synchronization)

하와이블루 2022. 8. 14. 21:40
728x90

 

 

멀티 스레드 프로세스에서는 다른 스레드의 작업에 영향을 미칠 수 있기 때문에, 진행중인 작업이 다른 스레드에 간섭을 받지 않게 하기 위해 동기화(Synchronization) 라는 작업이 필요하다. 동기화는 간섭받지 않아야 하는 문장 또는 메소드를 락(lock)을 걸어 단 하나의 스레드만 출입이 가능하게 해준다. 마치 음식점 주문을 한명씩 받는 듯한 모습을 떠올리면 이해하기 쉽다.

 

 

멀티 스레드 프로그램에서 단 하나의 스레드만 실행 할 수 있는 코드 영역을 임계영역이라고하며, 자바에서 임계영역을 지정하기 위해 동기화 메소드를 제공한다. 스레드가 객체 내부의 동기화 메소드를 실행하면 즉시 객체에 잠금을 걸어 다른 스레드가 동기화 메소드를 실행 하지 못하도록 한다.

 

동기화 메소드를 만들기 위해서는 메소드 선언에 synchronized 예약어를 사용하면 된다.

 

// 메서드
public synchronized 반환형 메소드명(매개변수1, ...){
	...
}
// 특정 영역(문장)
synchronized (this) {
	...
}

 

 

 

 

 

728x90