【发布时间】:2011-09-28 12:53:20
【问题描述】:
我有一个 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() 上的同步属性强制执行。 我对重写代码不太感兴趣。我可以想出一些解决方案来解决这个问题,但我对行为是什么感兴趣,给定一个从本机代码调用的同步方法。
【问题讨论】:
标签: java java-native-interface synchronized