2013-11-04 3 views
3

Java에서 대기 알림 메커니즘에 대해 매우 기본적인 질문이 있습니다. 우리는 이것을 사용하여 두 개의 서로 다른 스레드를 동기화 할 수 있다는 것을 알고 있지만,이 스레드는 동일한 프로세스에서 실행되어야합니까? 두 개의 서로 다른 프로세스에서 두 개의 스레드가 실행되는 경우 어떻게해야합니까? 대기 알림 방식이 여전히 작동합니까?Java 대기 알림 - 다른 프로세스 간 메커니즘

+0

아래의 모든 대답이 정확합니다. 나는 그저 하나를 받아 들여야 만했다. – pree

답변

1

JVM 프로세스를 시작하면 작성한 모든 스레드와 사용하는 메모리가 해당 JVM 인스턴스에 속하지만 그 외의 다른 스레드는 없습니다.

다른 JVM 인스턴스를 시작할 때이 두 인스턴스는 메모리 자원을 공유하지 않습니다. 따라서 wait/notify (또는 그와 관련된 다른 객체)는 JVM 인스턴스에 속한 스레드에서만 액세스 할 수 있으며 다른 프로세스에서는 액세스 할 수 없습니다.

2

다른 프로세스에서 실행되는 스레드에 대해서는 대기 알림이 작동하지 않습니다.

가정하자 프로세스 A는 0x1000 메모리 할당 - 0x2000, 그리고 0x1200

프로세스 B는 0x3000 메모리 할당 로크에 동기된다 -를 0x4000. 그것은 아마도

당신의 최선의 동기화는

  • 이 프로세스가 로컬 TCP/IP 소켓을 통해 서로 대화가 될 것입니다 그 시점에서 접근 ... 그것을 할 수있는, 0x1200에 대한 액세스를 얻을 수
  • 프로세스를 읽으십시오 & 쓰기 잠금 파일
+1

+1 참고 : 자바는 모든 객체가 재배치 될 수 있기 때문에 메모리 주소에 대한 유혹에 저항하는 것이 중요합니다. 메모리 대신 "참조"라는 단어를 사용해야합니다. – Gray

1

아니오, 다른 프로세스는 다른 JVM을 시작하므로 스레드가 거기에서 통신하지 않습니다. 메커니즘은 동일한 JVM에서 실행중인 스레드와 함께 작동합니다.

wait() 다른 스레드가 계속 실행되는 동안 개체 모니터를 해제하고 무한 절전 모드로 전환합니다. notify()wait()이라는 첫 번째 스레드를 동일한 객체 모니터에서 깨 웁니다.