Yerel koddan da aramak istediğim bazı (özel statik) senkronize yöntemlere sahip bir java sınıfım var. bazı örnek kod ile benyerel koddan java senkronize yöntem erişimi
public class SomeClass {
private static synchronized void method() {
//do something that needs synchronization
}
}
ve ilgili yerel kod (C++) ne anlama geldiğini daha netleşiyor
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
}
Peki merak ediyorum ben MonitorEnter/MonitorExit veya eğer aramanız gerekirse olduğunu yöntem eşitlemesi, zaten SomeClass.method() üzerindeki senkronize öznitelik tarafından zorlanır. Kodu yeniden yazmayı çok istemiyorum. Bu konuda çalışmak için birkaç çözüm düşünebilirim, ancak yerel koddan çağrılan bir senkronize yöntem göz önüne alındığında, davranışın ne olduğu ile ilgileniyorum.
Teşekkür ederiz! Bunların aynı etkiye sahip olduğu belirtilirse, aynı bayt kodunu oluşturduklarını varsayarız, bu nedenle MonitorEnter/MonitorExit burada/gereksizdir. –