我有一个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()上的synchronized属性已经强制执行了方法同步。我不太关心重写代码,我可以想到几个解决方法来解决这个问题,但我对于从本地代码调用的同步方法的行为很感兴趣。