2011-03-17 5 views
3


나는 netbeans를 사용하고 있으며 스레드 활동을 살펴 보는 프로파일 러입니다. 그래프는 실행중인 스레드가 실행중인 것보다 많을 때 스레드가 여러 상태 (실행, 대기, 모니터)를 유지할 수 있음을 보여줍니다.
작업 스레드가 동기화 필요없이 읽기 전용 변수 만 사용해야하도록 내 Java 응용 프로그램을 작성했습니다.
그러나 netbeans 프로파일 러를 실행할 때 내 스레드가 모니터 상태에있는 경우가 종종 있습니다. 나는 모니터가 잠금 해제되기를 기다리고 있다고 가정하지만, 어떤 모니터인지는 상상할 수 있습니다.대기중인 스레드가 어떤 모니터인지 보는 방법은 무엇입니까?

제 질문은 : 스레드가 기다리고있는 모니터를 이해하는 방법이 있습니까?

그것은 당신이 코드는 그것에 고정되는 오브젝트를보다 동기화 ratehr이 필요하다는입니다 동기화 및 당신이 정말 이유를 알고있다 필요하지 않는 프로그램을 작성했습니다 같은 소리 당신

답변

5

모니터에서 대기 할 때 먼저 스레드 덤프를 시도하십시오. 이를 수행하는 방법은 다양하며 jstack, jvisualvmkill -3입니다. 또한 Netbeans은 실행 된 응용 프로그램에 대해이 작업을 수행 할 수 있습니다.

스레드 덤프 파일을 가져 오면 tda으로 가져옵니다. 일반 텍스트 편집기에서 파일을 읽는 것만으로도 많은 것을 발견했지만이 간단한 응용 프로그램은 스레드와 모니터를 그룹화하고 하이퍼 링크를 포함한 스레드를 탐색 할 수있게 해줍니다. 꽤 가려 보이지만 잘 작동합니다.

스택 추적 (Java 개발자에게는 매우 중요한 기술 임)을 읽는 데 어려움이 있다면 여기 대기 스레드를 게시하십시오.

+0

++ 오른쪽. 각 스레드의 스택은 왜 그것이 기다리는지를 정확히 알려 주어야합니다. –

0

감사드립니다. 코드의 위치를 ​​찾으려면 스레드 덤프를보십시오. Jconsole/jstack이 이것을 할 수 있습니다.

관련 문제