доступ к синхронизированному методу java из родного кода

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

9
задан Eric Moors 28 September 2011 в 12:53
поделиться