[CS/운영체제] 멀티스레드와 동시성 - 15부

황제연·2025년 7월 8일
0

CS학습

목록 보기
129/193
post-thumbnail

Condition을 분리해보자

생산자는 소비자를 소비자는 생산자를 깨우도록 한다면 비효율적으로 실행되는 부분이 제거됩니다
방법은 매우 간단합니다 Condition을 각각 두개 생성하면 됩니다

Condition prodCond = lock.newCondition();
Condition consCond = lock.newCondition();

이렇게 둘로 나눠서 Condition을 관리하면 생산자는 소비자를 깨우도록
소비자는 생산자를 깨우도록 만들 수 있습니다

예를들어 생산자에서 signal.로 consCond에 있는 스레드만 깨우도록 한다면, 비효율을 막을 수 있습니다
반대인 상황도 동일하게 적용하면 됩니다!

Object.notify() vs Condition.signal()

Object.notify()는 대기중인 스레드 중 임의의 하나를 선택해서 깨웁니다
스레드가 꺠우는 순서는 정의되어있지 않습니다

Condition.signal()은 대기중인 스레드 중 하나를 꺠우고 일반적으로 FIFO 순서로 꺠웁니다
참고로 ReentrantLock을 가지고 있는 스레드가 호출해야합니다

참고

  • 김영한의 실전 자바 - 고급 1편
profile
Software Developer

0개의 댓글