2009-07-23 2 views
1

만약 내가 그렇다면.지시 된 notifyAll()

내 메인 스레드가 3 개의 스레드를 생성한다고 가정합니다. 이 세 쓰레드는 특정 객체에서 wait()를 호출합니다. 그런 다음 주 스레드는 동일한 객체에 대해 notifyAll()을 호출합니다.

thread2와 thread2만이 진행될 수 있습니다. thread1과 thread3은 알림을 무시하고 대기 상태로 돌아갑니다.

본질적으로 내가 선택한 스레드로 알림을 보내려면 어떻게해야합니까?

만약 내가 잘못 생각하지 않는다면, 이것은 자바 5에서 매우 간단 할 것입니다. 하나는 다른 조건을 만들고 주 스레드는 thread2가 대기하는 조건을 충족 시키도록 할 것입니다.

그러나 pre5에서 어떻게 해결할 수 있습니까?

건배, 빅

답변

1

당신은 스레드도 notify없이 자연 웨이크 수 있음을 유의하십시오. 그래서 당신은 항상 어떤 종류의 상태가 필요합니다. 일반적인 형식의 코드는 다음과 같습니다.

synchronized (lockObj) { 
    while (!condition) { 
     lockObj.wait(); 
    } 
} 

특정 작업을 수행하는 스레드를 깨우는 성능상의 이유로 인해 발생할 수 있습니다. 그 모양을 보면 java.util.concurrent.locks이지만 성능상의 문제가 아니라 옳은 일을하는 문제입니다.

관련 문제