Thread(스레드) - synchronized

개비의 끄적끄적·2023년 3월 30일
0

💡 synchronized

  • 스레드의 충돌을 방지하기 위해 한 번에 한 스레드만 접근할 수 있도록 허용
  • 싱크 처리를 하면 공유 자원의 일관성을 보장할 수 있다.
  • 한 번에 한 스레드만 접근할 수 있는 영역을 임계 영역(Critical Section)이라고 한다.

🔎 Object 클래스의 wait() 메소드

  1. 스레드가 동작하지 않고 대기 상태가 됨
  2. 다른 스레드가 깨울 때까지 대기

🔎 Object 클래스의 notify() 메소드

  1. 다른 스레드를 깨움
  2. 스레드가 여러 개인 경우에는 notifyAll() 메소드로 모든 스레드를 깨운다.

🎯 예시 - 하나의 자원을 공유하는 과정 보기

Cleaner는 1개 (공유 자원)
Cleaner를 사용할 Robot 2개 (스레드)
Robot이 Cleaner를 차지하기 위한 쟁탈전이 벌어진다.

notify(); => 나 부엌/화장실/방 청소 다 했다고 알리고(다른 스레드를 깨우는 거)
wait(); => 잠깐 쉼(대기). 이 두 메소드를 스레드끼리 왔다갔다 번갈아가면서 진행함.


// cleaner.@@Cleaning(); => 클리너의 화장실 청소기능을 사용하겠단 의미
// 각 공간에 청소로봇을 만들고 Thread 3번씩 진행



// 각 Robot들이 Cleaner를 차지하기 위한 쟁탈전을 벌인다. (하나의 자원을 공유하는 과정)

📰 콘솔창 결과

오룝지만 싱기해,,

profile
앗녕하세요! 블비의 개적발적🐾

0개의 댓글