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