synchronized
डालने से कहीं बेहतर है, हर जगह आपके वर्गों की ज़रूरतों के बारे में सावधानीपूर्वक कारण है, फिर उन आविष्कारों को सुनिश्चित करने के लिए पर्याप्त सिंक्रनाइज़ करें।
- गतिरोध
- जीवंतता समस्याओं
डेडलॉक हर कोई जानता है: आप ओवर-सिंक्रनाइज़, आप दो जोखिम बनाते हैं। लचीली समस्याएं सिंक्रनाइज़ेशन की लागत से संबंधित नहीं हैं, बल्कि इस तथ्य के बजाय कि यदि आप बहुस्तरीय अनुप्रयोग में सबकुछ वैश्विक रूप से सिंक्रनाइज़ करते हैं, तो मॉनीटर प्राप्त करने के लिए कई धागे अवरुद्ध हो जाएंगे क्योंकि दूसरा धागा कुछ असंबंधित स्पर्श कर रहा है लेकिन इसका उपयोग कर रहा है निगरानी।
यदि आप सुरक्षा के लिए हर जगह एक कीवर्ड को थप्पड़ मारना चाहते हैं, तो मैं synchronized
के बजाय final
का उपयोग करने की अनुशंसा करता हूं। :)
कुछ भी जो आप final
कर सकते हैं, बेहतर थ्रेड सुरक्षा और ताले द्वारा आविष्कारों को बनाए रखने की आवश्यकता के बारे में आसान तर्क में योगदान देता है। एक उदाहरण देने के लिए, मान लीजिए कि आप इस तुच्छ वर्ग डालते हैं:
public class SimpleClass {
private volatile int min, max;
private volatile Date startTime;
// Assume there are many other class members
public SimpleClass(final int min, final int max) {
this.min = min;
this.max = max;
}
public void setMin(final int min) {
// set min and verify that min <= max
}
public void setMax(final int max) {
// set max and verify that min <= max
}
public Date getStartTime() {
return startTime;
}
}
ऊपर वर्ग के साथ
, जब मिनट या अधिकतम सेट करते समय आप सिंक्रनाइज़ करने के लिए की जरूरत है। उपरोक्त कोड टूटा हुआ है। इस वर्ग में क्या आविष्कार है? आपको यह सुनिश्चित करना होगा कि min <= max
हर समय, जब भी कई थ्रेड setMin
या setMax
पर कॉल कर रहे हों।
इस कई चर के साथ एक बड़ा वर्ग है मान लिया जाये कि और तुम सब कुछ सिंक्रनाइज़ है, तो अगर एक धागा setMin
कॉल और एक अन्य धागा getStartTime
कहता है, दूसरा धागा अनावश्यक रूप से setMin
रिटर्न जब तक अवरुद्ध हो जाएगा। यदि आप इसे कई सदस्यों के साथ कक्षा के साथ करते हैं, और मानते हैं कि उनमें से केवल कुछ सदस्य इनवेरिएंट्स में शामिल हैं जिन्हें बचाव किया जाना चाहिए, तो सबकुछ सिंक्रनाइज़ करने से इस तरह की कई समस्याएं उत्पन्न हो जाएंगी।
इसी कारण से वे ब्लैक बॉक्स सामग्री से विमान नहीं बनाते हैं ... –