У меня есть java класс, который имеет некоторые (private static) синхронизированные методы, которые я хочу вызывать и из нативного кода. с некоторым примером кода становится более понятно, что я имею в виду
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, или синхронизация методов уже обеспечивается атрибутом synchronized на SomeClass.method(). Я не очень заинтересован в переписывании кода. Я могу придумать несколько решений, как это обойти, но меня интересует поведение синхронизированного метода, вызываемого из родного кода.