तो मैं भले ही objectTwo
के लिए ताला उपलब्ध है इसजावा में बाधाओं के आदेश के बिना एकाधिक ताले कैसे प्राप्त करें?
synchronized(objectOne){ do stuff }
synchronized(objectTwo){ do stuff }
इस के साथ समस्या यह कार्यक्रम पर ताला के लिए इंतजार करेंगे है के समान कोड है,। मैं जो करने की कोशिश कर रहा हूं वह कहता है: और objectTwo
दोनों को लॉक करने का प्रयास करें, और जो भी लॉक आपको पहले लॉक करता है वह उस लॉक के लिए सामान करता है। मैं एक समाधान के साथ आया हूं लेकिन मुझे लगता है कि यह बदसूरत है और मैं सोच रहा हूं कि किसी के पास कोई बेहतर विचार है या नहीं।
यहां मेरा विचार है: 2 धागे शुरू करें, प्रत्येक लॉक पर प्रतीक्षा कर रहा है और फिर मुख्य धागा CountDownLatch पर प्रतीक्षा करेगा। तो अगर आप कुछ इस तरह के साथ अंत:
CountDownLatch latch = new CountDownLatch(2);
new Thread(new Runnable(){
public void run(){
synchronized(objectOne) { do stuff }
latch.countDown();
}).start();
new Thread(new Runnable(){
public void run(){
synchronized(objectTwo) { do stuff }
latch.countDown();
}).start();
latch.await();
यह मेरे लिए एक उचित दृष्टिकोण की तरह लगता है। – ArtB
मैं पोस्ट किए गए कोड से नहीं बता सकता, लेकिन मेरे अनुभव में, एक वर्ग जो दो अलग-अलग वस्तुओं पर ताला लगाता है, लगभग हमेशा दो वर्गों में विभाजित होना चाहिए, लॉकिंग के साथ ** दो कक्षाओं के अंदर ** कक्षा के अनुसार नहीं उन्हें – Nate
आप दो अलग-अलग ताले का उपयोग कर रहे हैं, इसलिए थ्रेड बी को थ्रेड ए द्वारा मेमोरी में बदलाव नहीं दिखाई दे सकते हैं, मुझे संदेह है कि यहां कोई घटना नहीं होगी-इससे पहले। –