यहाँ कोड है
सार्वजनिक वर्ग TestDeadlockExample1 {सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] आर्ग्स) {अंतिम स्ट्रिंग resource1 = "xyz"; अंतिम स्ट्रिंग संसाधन 2 = "pqr"; // t1 संसाधन 1 को लॉक करने का प्रयास करता है तो संसाधन 2 थ्रेड टी 1 = नया थ्रेड () {सार्वजनिक शून्य रन () {सिंक्रनाइज़ (संसाधन 1) {System.out.println ("थ्रेड 1: लॉक संसाधन 1"); कोशिश {Thread.sleep (10000);} पकड़ (अपवाद ई) {} सिंक्रनाइज़ (संसाधन 2) {System.out.println ("थ्रेड 1: लॉक संसाधन 2"); }}}}; // t2 संसाधन 2 को लॉक करने की कोशिश करता है तो संसाधन 1 थ्रेड टी 2 = नया थ्रेड () {सार्वजनिक शून्य रन () {सिंक्रनाइज़ (संसाधन 2) {System.out.println ("थ्रेड 2: लॉक संसाधन 2"); कोशिश {Thread.sleep (10000);} पकड़ (अपवाद ई) {} सिंक्रनाइज़ (संसाधन 1) {System.out.println ("थ्रेड 2: लॉक संसाधन 1"); }}}}; t1.start (); t2.start (); Println ( "पूरा"); }} यहाँ t1.start (); t2.start (); Println ( "पूरा");
यहां
इस t1.start () और t2.start () में अनुक्रमिक क्रम में लिखा गया है, इसलिए मेरा संदेह यह है कि दोनों थ्रेड उसी पर शुरू होता है या नहीं या टी 1 शुरू होता है, तो चलाता है तो टी 2 और निष्पादित होता है, अगर यह सही है, तो यह कैसे एक गतिरोध स्थिति बन जाती है..मैं इन धागे के निष्पादन को जानना चाहता हूँ
मैंने सीखा है कि डेडलॉक को रोकने के लिए, आपको सिंक्रनाइज़
ब्लॉक को लगातार समान करना होगा।
< कोड> सार्वजनिक शून्य रन () {सिंक्रनाइज़ (संसाधन 1) {सिंक्रनाइज़ (संसाधन 2) {System.out.println ("थ्रेड 1: लॉक संसाधन 1"); System.out.println ("थ्रेड 1: लॉक संसाधन 2"); कोशिश {Thread.sleep (10000);} पकड़ (अपवाद ई) {}}}}
और
थ्रेड टी 2 = नया थ्रेड () { सार्वजनिक शून्य चलाने () {सिंक्रनाइज़ (संसाधन 1) {सिंक्रनाइज़ (संसाधन 2) {System.out.println ("थ्रेड 2: लॉक संसाधन 2"); System.out.println ("थ्रेड 2: लॉक संसाधन 1"); कोशिश {Thread.sleep (10000);} पकड़ (अपवाद ई) {}}}}};
No comments:
Post a Comment