네이티브 코드에서 호출하려는 일부 (개인 정적) 동기화 된 메서드가있는 Java 클래스가 있습니다. 몇 가지 예제 코드로 내가access java 네이티브 코드에서 동기화 된 메서드
public class SomeClass {
private static synchronized void method() {
//do something that needs synchronization
}
}
및 관련 네이티브 코드 (C++)의 의미를 더 명확하게
void someFunction(JNIEnv * env) {
jclass someClass = env->findClass("SomeClass");
jmethodID methodId = env->GetStaticMethodID(jclass, "method", "()V");
env->MonitorEnter(jclass); // <--- IS THIS NEEDED/ALLOWED
env->CallStaticVoidMethod(jclass, methodId);
env->MonitorExit(jclass); // <--- IS THIS NEEDED/ALLOWED
}
그래서 내가 궁금하면 내가 MonitorEnter/MonitorExit, 또는 경우를 호출해야하는 경우입니다 메서드 동기화는 SomeClass.method()의 동기화 된 속성에 의해 이미 적용됩니다. 코드를 다시 작성하는 데별로 관심이 없습니다. 이 문제를 해결할 수있는 몇 가지 솔루션을 생각해 볼 수는 있지만 네이티브 코드에서 호출되는 동기화 된 메서드를 사용하면 동작이 무엇인지 관심이 있습니다.
감사합니다. 동일한 효과를 가지도록 지정되었으므로 동일한 바이트 코드를 생성한다고 가정하므로 여기서는 MonitorEnter/MonitorExit가 필요하지 않습니다. –