2011-05-05 2 views
0

Java 모니터에 대한 용어에 문제가 있습니다.Java 프로그래밍 언어 모니터와 대기/알림 모니터를 구별하는 조건

  • synchronized 블록에 의해 획득 될 수있는 사람들 wait()을 사용하여 획득 될 수있는 사람들을

모니터 자체가있다 : 우선 I 모니터 두 가지 구별 개체 (wait() 또는 synchronized)가 호출됩니다. 이 두 가지 유형의 모니터를 어떻게 구분할 수 있습니까? JVMTI API에는 다음과 같이 쓰여집니다.

"monitor"는 Java 프로그래밍 언어 객체 모니터를 의미합니다.

이렇게하면 도움이되지 않습니다. 그러나 모니터와 경쟁 모니터라는 용어를 사용하여 함수 호출 측면에서 적어도 API에서이를 구별합니다.

답변

3

기본적으로 이들은 동일한 내용입니다. 이들은 ,, mutexes 및 (Java) 원시 잠금을 모니터하며,이 용어는 현재 사용중인 것과 거의 동일합니다.

wait()notify() 호출 스레드가 뮤텍스를 포함하는 주 사용 패턴

상태로 지칭되지만, 동일한 뮤텍스 동시에 상호 배제 간단한 영역으로서 사용될 수있다.

문구 "은 모니터 모니터"는 상호 배제 영역에 경합이있는 모니터/뮤텍스/프리미티브 잠금을 나타냅니다. 또는 한 스레드가 뮤텍스를 보유하고 다른 스레드가 스레드를 획득하려고 기다리는 경우보다 간단하게 말하십시오.

위키 백과 참조 :

(이 페이지가 완전히 일치 확정, 그리고 아니라는 것을 지적하지만 대부분의 IT 사람들되어야한다. 용어를 사용하여 "빠르거나 느슨하게"연주하고, 소수의 사람들이 원래의 출판물을 읽었습니다.하지만 이봐, 그건 언어가 진화하는 방식입니다.)

1

둘 다 똑같습니다. "모니터"는 두 가지 기능을 모두 제공합니다. synchronized 블록의 VM 지침 monitorenter (즉,이 synchronized 블록을 입력) 또는 wait에 발생할 수 monitorentermonitorexit

경합이라고 알 수 있습니다 (이 일어나야 할 때 잠금을 다시 획득하려고 시도합니다.)

반대로 LockCondition 인터페이스는 java.util.concurrent에서 별도의 개체로 제공됩니다.(Condition.await() 잠금 장치를 재 - 획득하고 다른 스레드에 의해 Lock.lock()에 맞설 필요가있다.)하지만 그들은 모니터에 유사하게 동작

1

당신은 wait()를 사용하여 모니터를 획득 할 수 있습니다. 완전히 반대입니다. 먼저 synchronized을 사용하여 모니터를 얻고을 사용하면 wait()을 사용할 수 있습니다. 그렇지 않으면 IllegalMonitorStateException이됩니다.

그래서 당신이 설명하는 구별은 존재하지 않습니다.