2012-05-25 3 views
0
String obj; 
    synchronized(obj){ 
     ... 
    } 

어떻게

모두, 내가 동기화 된 블록 매개 변수를 얻고 싶은 은 어떻게 매개 변수를 얻을 수와 Javassist를 사용하여 바이트 코드 레벨에서 'obj와'수와 Javassist에 동기화 된 블록 객체 매개 변수를 얻으려면? 모든 제안을 환영합니다.

답변

0

Javassist 또는 ASM의 저수준 API를 사용하여 바이트 코드 지침을 분석하여 원하는 것을 수행해야합니다.

Object obj; 
synchronized(obj){ 
    //... 
} 

가 스택의 상단에 OBJ 필드 값을 배치 바로 전에 monitorenter 명령은 동기화 된 블록과 astore_1 명령의 시작이다

0: aload_0 
1: getfield  #2; //Field obj:Ljava/lang/Object; 
4: dup 
5: astore_1 
6: monitorenter 
... 

로 변환 - 그 값에는 '입니다 다시 찾고.