jstack 로 자물쇠 발견

참고:http://blog.chinaunix.net/uid-20104447-id-4075333.html
1. 자바 의 sdk 설명 에 따 르 면 한 스 레 드 의 stop 을 호출 할 때 (이 방법 을 사용 해 야 하 든 말 든) 스 레 드 는 즉시 종료 되 지만 아래 에는 없 는 이 유 는 무엇 입 니까?
4. 567913. 이 프로그램 을 실행 한 다음 에 jstack 로 스 택 을 출력 합 니 다.결 과 는 다음 과 같다. 편 의 를 위해 저 는 main 과 thread 0 의 스 택 정보 만 남 겼 습 니 다.
4. 567913. 위 에서 볼 수 있 듯 이 main 스 레 드 에서 t. stop 을 호출 할 때 한 곳 을 기다 리 고 있 습 니 다. 이 자 물 쇠 는 thread - 0 에 의 해 잠 겨 있 습 니 다.원본 코드 를 다시 읽 고 위 에서 실 현 된 run 방법 을 발 견 했 습 니 다. 앞 에 synchronized 가 있 습 니 다.자바 의 소스 코드 를 보고 있 습 니 다: 과연 그 렇 군요.
package java_jni;
public class Main {
    public static void main(String []args){
        try { 
            Thread t = new Thread() { 
                public synchronized void run() { 
                    try { 
                        Thread.sleep(100000);
                    } catch (Throwable ex) { 
                        System.out.println("Caught in run: " + ex); 
                        ex.printStackTrace(); 
                    } 
                } 
            }; 
            t.start(); 
            // Give t time to get going... 
            Thread.sleep(100); 
            t.stop(); // EXPECT COMPILER WARNING 
        } catch (Throwable t) { 
            System.out.println("Caught in main: " + t); 
            t.printStackTrace(); 
        } 
    }
}

좋은 웹페이지 즐겨찾기