Java - 쓰레드의 동기화 (synchronization)

춤추는개발자·2022년 12월 13일
0

Java 정리

목록 보기
59/59

쓰레드의 동기화

  • 싱글쓰레드에서는 프로세스 내에서 단 하나의 쓰레드만 작업을하기 때문에 프로세스의 자원을 가지고 작업하는데 문제가 없다. 하지만 멀티쓰레드의 경우 같은 프로세스 내의 자원을 공유해서 작업을 진행하기 때문에 서로의 작업에 영향을 줄 수 있다.
  • 진행중인 작업이 다른 쓰레드에게 간섭받지 않게 하려면 동기화가 필요한데 동기화란 쓰레드가 진행 중인 작업을 다른 쓰레드가 간섭하지 못하도록 막는 것을 쓰레드의 동기화라고 합니다.
  • 동기화 하려면 간섭받지 않아야 하는 문장들을 임계 영역으로 지정하고 임계영역은 락을 얻은 단 하나의 쓰레드만 출입이 가능하다. (객체 한개에 락은 한개이다.)

synchronized를 이용한 동기화

  • synchronized로 임계영역을 설정하는 방법은 두가지이다.
1. 메서드 전체를 임계 영역으로 지정하는 방법
public synchronized void calcSun() { 
 // 코드
}
2. 특정한 영역을 임계 영역으로 지정하는 방법
synchronized(객체의 참조변수( {
 // 코드
}
  • 한번에 한 쓰레드만 사용하기 때문에 영역을 최소화 해야한다.

0개의 댓글