multithreading - Synchronized method implementation and wrong behavior in java -
वर्ग prab लागू करता है Runnable {सार्वजनिक सिंक्रनाइज़ रहित toTest () {for (int i = 0; i & lt; 10 ; I ++) {try {थ्रेड.sleep (2 * 1000); } पकड़ (अपवाद ई) {System.out.println ("अपवाद" + ई); } System.out.println ("मैं प्राब से हूं" + I + धागा। खरेंचट्रेड ()। GetName ()); }} @ ओवरराइड पब्लिक वाइड रन () {toTest (); }} सार्वजनिक वर्ग के थ्रेड क्लास {सार्वजनिक स्थिर शून्य मुख्य (स्ट्रिंग [] आर्ग्स) {// टोडो ऑटो-जनरेटेड विधि स्टब System.out.println ("---"); थ्रेड टी = नया थ्रेड (नया प्राब ()); थ्रेड c = नया थ्रेड (नया प्राब ()); t.start (); T.setName ("मैं टी हूँ"); c.start (); C.setName ("मैं सी हूँ"); System.out.println ("मुख्य थ्रेड से"); }} बाहर रखो: ---
मैं मुख्य थैले से हूँ प्रब 0 से हूँ मैं टीआई हूं प्रब 0 से हूँ I am मैं प्राब 1 से हूँ I मैं हूँ प्राब 1I से हूँ मैं हूँ Prab 2I से हूँ मैं प्राब 2 से हूँ मैं हूँ TI हूँ प्रब 3 से हूँ मैं हूँ TI हूँ प्रब 3 से हूँ मैं हूँ मैं प्रब 4 से हूँ मैं हूँ TI हूँ प्रब 4 से हूँ मैं हूँ सी मैं हूँ प्रब 5 मैं हूँ प्रिया 5 से हूँ मैं हूँ मैं प्रब 6 से हूं मैं हूँ मैं प्रब 6 से हूं मैं हूँ मैं प्रब 7 से हूं I मैं हूँ प्रैब 7 से हूँ मैं हूँ मैं प्राब 8 से हूँ मैं हूँ 8 पर हूँ मैं 8 पर हूँ I प्राब 9 से हूँ I am Prab 9 I am से अपेक्षित O / P: पहला धागा टी तो पूरा होना चाहिए थ्रेड सी।
आप विभिन्न वस्तुओं पर सिंक्रनाइज़ किए गए हैं, चूंकि विधि हस्ताक्षर पर सिंक्रनाइज़ किए गए जोड़ने से वर्तमान उदाहरण लॉक हो जाएगा और आपने दो ऑब्जेक्ट बनाए हैं। सिंक्रनाइज़ किए गए सामान्य ऑब्जेक्ट पर होना चाहिए, फिर केवल आप अपेक्षित आउटपुट देख सकते हैं। दोनों थ्रेड के लिए एक प्राब वस्तु का उपयोग करें, फिर आउटपुट देखें prab p = new prab (); थ्रेड टी = नया थ्रेड (पी); धागा सी = नया थ्रेड (पी);
Comments
Post a Comment