21.01.22-43일차

1447 단어 쓰레드ThreadThread

✈ 쓰레드(Thread)


🛫 쓰레드의 동기화(synchronization)

  • 멀티 쓰레드 프로세스에서는 다른 쓰레드의 작업에 영향을 미칠 수 있다.
  • 진행중인 작업이 다른 쓰레드에게 간섭받지 않게 하려면 '동기화' 필요!
    📚쓰레드의 동기화 - 한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하게 막는 것
  • 동기화하려면 간섭받지 않아야 하는 문장들을 '임계 영역'으로 설정
  • 임계영역은 락(lock)을 얻은 단 하나의 쓰레드만 출입가능(객체 1개에 락 1개)

🛫 synchronized를 이용한 동기화

  • synchronized로 임계영역(lock이 걸리는 영역)을 설정하는 방법 2가지
1. 메서드 전체를 임계 영역으로 저장
public synchronized void calcSum() {
	// ...					// 임계 영역(critical section)
}
.
2. 특정한 영역을 임계 영역으로 지정
synchronized(객체의 참조변수){
	// ...					// 임계 영역(critical section)
}

🛫 wait()과 notify()

  • 동기화의 효율을 높이기 위해 wait(), notify()를 사용
  • Object클래스에 정의되어 있으며, 동기화 블록 내에서만 사용할 수 있다.
  • wait() - 객체의 lock을 풀고 쓰레드를 해당 객체의 waiting pool에 넣는다.
  • notify() - waiting pool에서 대기중인 쓰레드 중의 하나를 깨운다.(랜덤)
  • notifyAll() - waiting pool에서 대기중인 모든 쓰레드를 깨운다.


🚋 출처

자바의 정석 책 & 유튜브

좋은 웹페이지 즐겨찾기