Java JVM 프로파일 링, 스레드 상태- "모니터"상태는 무엇을 의미합니까?


81

여기에 이미지 설명 입력

VisualVM을 사용하여 다중 스레드 Java 응용 프로그램을 연결하고 스레드에는 실행 중, 잠자기, 대기, 모니터의 4 가지 상태가 있습니다. 이 모니터링 상태는 무엇을 의미합니까? 대기와 모니터의 차이점은 무엇입니까?

답변:


89

이러한 상태는 Thread.State열거 형에 언급 된 것과 동일합니다 . "기다림"은 문서에 나와있는 것처럼 다음을 의미합니다.

스레드는 다음 메소드 중 하나를 호출하여 대기 상태에 있습니다.

  • 제한 시간이없는 Object.wait
  • 시간 제한없이 Thread.join
  • LockSupport.park

"모니터"는 BLOCKED스레드가 객체에 대한 잠금을 얻기 위해 대기하는 synchronized상태입니다 (다른 스레드가 이미 연관된 잠금을 보유하고있는 동안 블록 또는 메소드 에 들어 가려고하기 때문입니다 ).


24
여기와 문서에서 "모니터"가 "잠금"의 동의어로 사용된다는 것을 아는 것이 OP와 같은 주제에 처음 접하는 사람이라면 도움이 될 것입니다.
matt b

6
어쨌든 스레드를 차단 / 모니터링하는 원인이되는 동기화 된 개체 (또는 코드 줄)를 알 수 있습니까?
user123321

3
@ user123321 스레드 덤프를 만들 수 있습니다. ( "스레드"탭의 오른쪽 상단 모서리에있는 버튼) 여기에서 스레드가 동기화하려는 대상과 잠금을 유지하는 스레드를 볼 수 있습니다.
Fildor

그리고 사이의 차이가 무엇 sleepingwaiting스크린 샷에서 보여?!
Muhammad Gelbana

7

이것은 "모니터링"상태가 아닙니다. 스레드가 Thread.State.BLOCKED상태 에 있음을 나타냅니다 . 또 다른 좋은 답변 이 있습니다. 더 자세한 설명 을 위해이 링크 를 알려 드리겠습니다.


5

모니터는 스레드가 객체에 대한 잠금을 얻기 위해 기다리고 있음을 의미합니다. 예를 들어 한 스레드가 동기화 된 메서드를 실행 중이고 다른 스레드가 동일한 개체에서이를 호출하려고 할 때 메서드의 첫 번째 호출이 완료 될 때까지 사용할 수 없습니다. 첫 번째 스레드에는 해당 개체에 대한 모니터 또는 잠금이 있으므로 두 번째 스레드는 해제 될 때까지 기다려야하기 때문입니다.

에서 오라클 스레딩 자습서 :

"동기화는 고유 잠금 또는 모니터 잠금으로 알려진 내부 엔티티를 중심으로 구축됩니다. API 사양에서는 종종이 엔티티를 단순히"모니터 "라고합니다.) 고유 잠금은 동기화의 두 측면에서 역할을합니다. 개체의 상태와 가시성에 필수적인 관계를 구축하기 전에 발생합니다. "

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.