से जावा सिंक्रनाइज़ विधि का उपयोग करें मेरे पास एक जावा क्लास है जिसमें कुछ (निजी स्थैतिक) सिंक्रनाइज़ विधियां हैं जिन्हें मैं देशी कोड से भी कॉल करना चाहता हूं। कुछ उदाहरण कोड के साथ इसे और अधिक स्पष्ट हो जाता है मैं क्या मतलब हैदेशी कोड
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, या यदि कॉल करने की आवश्यकता है कि मैं क्या सोच रहा हूँ विधि सिंक्रनाइज़ेशन कुछClass.method() पर सिंक्रनाइज़ विशेषता द्वारा पहले ही लागू किया गया है। मुझे कोड को फिर से लिखने में बहुत दिलचस्पी नहीं है। मैं इसके चारों ओर काम करने के लिए कुछ समाधानों के बारे में सोच सकता हूं, लेकिन मुझे मूलभूत कोड से सिंक्रनाइज़ विधि के रूप में व्यवहार करने में दिलचस्पी है।
धन्यवाद! यह देखते हुए कि इन्हें एक ही प्रभाव के लिए निर्दिष्ट किया गया है, मैं मानता हूं कि वे एक ही बाइट कोड उत्पन्न करते हैं, इसलिए मॉनिटरइंटर/मॉनिटरएक्सिट की आवश्यकता नहीं है/अनावश्यक है। –