에 들어갈 수 있기 때문에 신호를 수신하는 것이 임계 영역 안에 들어갔음을 보증하지는 않는다.
대기 중에 있는 스레드를 추가로 실행하기 전에 원하는 조건이 충족되었는지 확인하는 디자인
패턴을 적용해야 한다. 예를 들어 공유 상태가 암시적 잠금으로 동기화가 보호될 때
wait
(
)를
호출하기 전에 조건을 확인해볼 수 있다.
synchronized
(
this
)
{
while
(
isConditionFulfilled
==
false
)
{
wait
();
}
//
조건을
만족해야
이
지점에
도달할
수
있다
.
}
이 패턴은 상태의 조건이 충족되었는지 확인한다. 그렇지 않으면 스레드는
wait
()
를 호출하여
스레드를 차단한다. 다른 스레드가 모니터에 알리고 대기 스레드가 깨어날 때, 조건이 충족되었
는지 다시 확인하고 충족되지 않았다면 다시 대기하고 새로운 신호를 기다린다.
CAUTION
_
흔한 안드로이드 사용 사례로,
UI
스레드에서 작업자 스레드를 생성하고 작업자 스레드가 일
부
UI
요소를 위한 결과를 생성하게 하는 경우가 있다. 그러면
UI
스레드는 결과를 기다려야 한다. 그러나
UI
스레드가 차단될 수도 있으므로 백그라운드 스레드의 신호를 기다리면 안 된다. 이러한 방법 대신 이후에 논
의할 안드로이드 메시지 전달 메커니즘을 사용하라.
4.
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month, and much more.