我有一个java类,有一些(私有静态)同步方法,我也想从本地代码调用。一些示例代码,它变得更加清楚明白我的意思从本机代码访问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属性强制执行。 我对重写代码没有那么感兴趣。我可以考虑一些解决方法来解决这个问题,但是我对这个行为是什么感兴趣,给定一个从本地代码调用的同步方法。
谢谢!鉴于这些被指定具有相同的效果,我会假设它们生成相同的字节码,所以MonitorEnter/MonitorExit在这里不需要/多余。 –