निम्नलिखित पर विचार करें: ARIAN मेरे लिए झुके गया है:डेडलॉक प्रक्रिया कौन सा पहला लॉक करता है?
public class Deadlock {
static class Friend{
private final String name;
public Friend (String name){
this.name = name;
}
public String getName(){
return this.name;
}
public synchronized void bow(Friend bower){
System.out.format("\n%S: %S has bowed to me!" , this.name, bower.getName());
bower.bowBack(this);
}
public synchronized void bowBack(Friend bower) {
System.out.format("\n%S: %S has bowed back to me!", this.name, bower.getName());
}
}
public static void main(String[] args) {
final Friend alf = new Friend("Alf");
final Friend arian = new Friend("Arian");
// Thread 1
new Thread(new Runnable() {
public void run(){ alf.bow(arian);}}).start();
//Thread 2
new Thread(new Runnable() {
public void run(){ arian.bow(alf);}}).start();
}
}
बाहर डाल
ALF है! एरियान: एएलएफ ने मुझे झुकाया है!
लॉक स्थिति .....
जब थ्रेड 1 रन, यह वस्तु दोस्त पर एक लॉक की आवश्यकता है। उस थ्रेड 2 के तुरंत बाद दूसरी ऑब्जेक्ट पर लॉक की आवश्यकता होती है। अब विधि धनुष थ्रेड 1 द्वारा लॉक है और इस प्रकार प्रिंट करता है "ALF: एरियन ने मुझे झुकाया है!"। थ्रेड 2 कैसे आता है धनुष और न ही * धनुष * दर्ज कर सकते हैं ??
सादर बी
आपकी टिप्पणियों के लिए बहुत सारे धन्यवाद। –