मुझे सिंक्रनाइज़ विधि और सिंक्रनाइज़ ब्लॉक के बीच का अंतर पता है लेकिन मुझे सिंक्रनाइज़ किए गए ब्लॉक भाग के बारे में निश्चित नहीं है।लॉक ऑब्जेक्ट पर सिंक्रनाइज़ किए गए और लॉक के रूप में इसका उपयोग करने के बीच क्या अंतर है?
मान लिया जाये कि मैं इस कोड
class Test {
private int x=0;
private Object lockObject = new Object();
public void incBlock() {
synchronized(lockObject) {
x++;
}
System.out.println("x="+x);
}
public void incThis() { // same as synchronized method
synchronized(this) {
x++;
}
System.out.println("x="+x);
}
}
है इस मामले में क्या का उपयोग कर lockObject और इस ताला के रूप में प्रयोग के बीच का अंतर है? यह मेरे जैसा ही लगता है ..
जब आप सिंक्रनाइज़ ब्लॉक का उपयोग करने का निर्णय लेते हैं, तो आप कैसे तय करते हैं कि कौन सा ऑब्जेक्ट लॉक होना है?
मैं http://stackoverflow.com/questions/3047564/java-synchronized-method-lock-on-object-or-method आप जवाब को देखें, तो में अपने प्रश्न का उत्तर मिल गया है, यह है बहुत स्पष्ट है कि अगर 2 धागे (टी 1 और टी 2) हैं जहां टी 1 x.addA() और टी 2 कॉल x.addB() कहते हैं। यदि दोनों addA और addB इसे लॉक के रूप में उपयोग करते हैं, तो x.addA() और x.addB() समवर्ती रूप से नहीं चल सकते हैं। जबकि यदि अगर Adda और addB ताला के लिए अलग वस्तु का उपयोग करता है, दोनों विधि बस कुछ जांच करने के लिए समवर्ती – GantengX
चला सकते हैं: उपरोक्त उदाहरण में, जब आप प्रभावी रूप से एक्स के लिए उपयोग की रक्षा करने के lockObject का उपयोग वहाँ एक स्थिति है जहाँ एक और धागा सकता है नहीं है सिंक्रनाइज़ किए गए ब्लॉक के बाद प्राप्त करें लेकिन println से पहले और x को फिर से बढ़ाएं? अर्थात। क्या आपको वास्तव में सिंक्रनाइज़ ब्लॉक के भीतर println की आवश्यकता है? –
आह सच है, मैं सिंक्रनाइज़ ब्लॉक में डाला है चाहिए, लेकिन मैं पहले से ही मेरे अपने प्रश्न का उत्तर दिया: डी – GantengX