18장 동시성2 (429 ~ 436)

<aside> 💡 작업 처리량 높이기

</aside>

  1. URL 목록을 받아 네트워크에 연결한 다음 각 페이지를 읽어오는 코드

Untitled

  1. URL Iterator를 받아 목록에 들어있는 페이지 내용을 제공하는 Iterator

Untitled

  1. PageIterator 인스턴스는 여러 스레드가 공유한다. 코드에서 synchronized 블록이 아주 작다는 사실에 주목하자.

데드락

<aside> 💡 데드락이 발생하는 4가지 조건

</aside>

  1. 상호 배제 : 여러 스레드가 한 자원을 공유하거나 그 자원은 동시에 사용하지 못 하고 개수가 제한적 (DB연결, 쓰기용 파일 열기 등)
  2. 잠금&대기 : 스레드가 자원을 점유하면 필요한 나머지 자원까지 모두 점유해 자원을 내놓지 않는다
  3. 선점 불가 : 한 스레드가 다른 스레드로부터 자원을 빼앗지 못한다
  4. 순환 대기 : 죽음의 포옹

<aside> 💡 데드락 발생시키지 않기

</aside>