2011-09-23 4 views
1

Java에서 동시에 2 개의 스레드가 시작되었습니다. 그러나 스레드 2 차단 된 것으로 나타났습니다 있지만 어디에 (서) 나는 몰라요. Java에서 스레드가 차단되었거나 기다리는 곳을 찾는 방법이 있습니까? 고마워.스레드가 차단 된 위치를 찾으십시오.

답변

1

당신은 모든 스레드에 대한 스택 추적을 얻을 수 jstack를 사용할 수 있습니다. 그러면 스레드가 차단 된 코드의 위치를 ​​정확하게 알 수 있습니다.

프로세스 내부에서 일어나는 일에 대해 더 자세한 그림을 보려면 VisualVM을 사용할 수 있습니다.

1

isAlive() 메서드를 사용하면 스레드가 여전히 활성 상태인지 확인할 수 있습니다. 다음은 메모리에 모든 스레드를 확인하는 샘플 코드는 다음과 같습니다

public class ThreadStates{ 
public static void main(String[] args){ 
    Thread t = new Thread(); 
    Thread.State e = t.getState(); 
    Thread.State[] ts = e.values(); 
    for(int i = 0; i < ts.length; i++){ 
    System.out.println(ts[i]); 
    } 
} 
} 
+0

내 스레드가 아직 살아 있는지 알기에 유용하지만 스레드가 대기중인 곳을 알고 싶습니다. 예상대로 실행되지 않습니다. – delita

0

jstack을 사용하면 스레드가 차단 된 부분을 찾을 수 있습니다. 그러나 동일한 프로그램 내에서 스레드를 검사하고 싶다면 thread.getStackTrace()를 사용할 수 있습니다.

관련 문제