मल्टीथ्रेडिंग में अस्थिर कीवर्ड बनाम सिंक्रनाइज़ेशन का उपयोग कब करें?जावा में मल्टीथ्रेडिंग में अस्थिर बनाम सिंक्रनाइज़ेशन का उपयोग कब करें?
उत्तर
volatile
का उपयोग करने के लिए यह सुनिश्चित करने के लिए कि एक चर के लिए प्रत्येक पढ़ने की पहुंच उस चर को लिखे गए नवीनतम मूल्य को देखेंगे। जब भी आपको कई निर्देशों के लिए स्थिर होने के लिए मूल्यों की आवश्यकता होती है तो synchronized
का उपयोग करें। (ध्यान दें कि यह जरूरी कई बयानों मतलब यह नहीं है; एकल कथन:।
var++; // NOT thread safe!
है नहीं धागा सुरक्षित भी var
अगर volatile
घोषित किया जाता है आप ऐसा करने की जरूरत:
synchronized(LOCK_OBJECT){var++;}
देखें इस मुद्दे का एक अच्छा सारांश के लिए here।
'परमाणु लोंग' विधि के साथ 'var ++' को संभालता है और केवल 'अस्थिर' फ़ील्ड। क्या आप एक बेहतर उदाहरण प्रदान करने के लिए अपना जवाब संपादित कर सकते हैं? – Gray
@ ग्रे - ठीक है। मेरा "बेहतर उदाहरण" यह है कि 'var' प्रकार' float' है। –
यह एक बहुत व्यापक सवाल है। सबसे अच्छा जवाब मैं दे सकता हूं synchronized
का उपयोग करना जब कई कार्यों को परमाणु रूप से — होने पर देखा जाना चाहिए या तो कोई भी कदम नहीं हुआ है।
एक ही कार्रवाई के लिए, volatile
पर्याप्त हो सकता है; यह अन्य धागे में परिवर्तन की दृश्यता सुनिश्चित करने के लिए स्मृति बाधा के रूप में कार्य करता है।
वाष्पशील केवल सुनिश्चित करता है। पढ़ा आपरेशन हमेशा धागे भर में स्मृति से नवीनतम राज्य देता है हालांकि, यह करता है संचालन के किसी भी लेखन सुरक्षा/आदेश को सुनिश्चित न करें, यानी दो थ्रेड किसी भी यादृच्छिक क्रम में अस्थिर चर अद्यतन कर सकते हैं। इसके अलावा यह यह सुनिश्चित करता है कि चर पर एकाधिक संचालन परमाणु हैं।
हालांकि एक सिंक्रनाइज़ ब्लॉक नवीनतम राज्य सुनिश्चित करता है और सुरक्षा लिखता है। इसके अलावा चर के लिए पहुंच और अद्यतन एक सिंक्रनाइज़ ब्लॉक के अंदर परमाणु है। ऊपर, फिर भी सच है, केवल तभी सभी पहुँच/प्रश्न में चर के लिए अद्यतन एक ही ताला वस्तु का उपयोग कर रहे हैं, जिससे कि कुछ ही समय में एक से अधिक थ्रेड चर के लिए उपयोग हो जाता है।
वोल्टाइल लॉक प्राप्त नहीं करता है, यह अंतर्निहित CPU आर्किटेक्चर का उपयोग करता है ताकि लेखन के बाद सभी धागे में दृश्यता सुनिश्चित हो सके।
- 1. सी ++ मल्टीथ्रेडिंग सिंक्रनाइज़ेशन
- 2. सी ++ अस्थिर मल्टीथ्रेडिंग चर
- 3. जावा में स्ट्रिंगबिल्डर का उपयोग कब करें
- 4. सी # में अस्थिर कीवर्ड का उपयोग कब किया जाना चाहिए?
- 5. सिंक्रनाइज़ेशन, कब उपयोग करना है या नहीं?
- 6. जावा अस्थिर संदर्भ बनाम AtomicReference
- 7. जावा में वेक्टर में सिंक्रनाइज़ेशन
- 8. पाइथन में गुणों का उपयोग कब करें विशेषताएँ बनाम कब उपयोग करें?
- 9. टाइपस्क्रिप्ट में कक्षा बनाम मॉड्यूल का उपयोग कब करें?
- 10. स्ट्रिंग विधियों में निर्मित रेगेक्स बनाम का उपयोग कब करें?
- 11. रूबी में $ stderr बनाम STDERR का उपयोग कब करें?
- 12. पायथन में कक्षा बनाम dict का उपयोग कब करें?
- 13. SQLITE_TRANSIENT बनाम SQLITE_STATIC का उपयोग कब करें?
- 14. RACReplaySubject बनाम RACMulticastConnection का उपयोग कब करें?
- 15. टेम्पलेट बनाम विरासत का उपयोग कब करें
- 16. विशेषता का उपयोग कब करें (संपत्ति बनाम)?
- 17. HtmlControls बनाम WebControls का उपयोग कब करें
- 18. HttpMessageHandler बनाम ActionFilter का उपयोग कब करें?
- 19. टचमोव बनाम mousemove का उपयोग कब करें?
- 20. स्ट्रेट बनाम str_replace का उपयोग कब करें?
- 21. वेक्टर का उपयोग कब करें और सी ++ में सरणी का उपयोग कब करें?
- 22. एक UI अनुप्रयोग में सिंक्रनाइज़ेशन कॉन्टेक्स्ट.SetSynchronizationContext() को कब कॉल करें?
- 23. जावा में प्रेत संदर्भों का उपयोग कब करें?
- 24. जावा - Iterators का उपयोग कब करें?
- 25. मल्टीथ्रेडिंग: मैं एक जॉइन का उपयोग कब करूंगा?
- 26. जावा मल्टीथ्रेडिंग
- 27. मल्टीथ्रेडिंग, जब नींद बनाम
- 28. जावा मल्टीथ्रेडिंग पर कुछ प्रश्न,
- 29. गुणों का उपयोग कब करें और जावा में मानचित्र कब करें?
- 30. CCSpriteBatchNode का उपयोग कब करें? Cocos2d में
http://stackoverflow.com/questions/3214938/java-volatile-modifier-and-synchronized-blocks और एक त्वरित गोगलिंग बहुत सारी जानकारी दिखाएगा –
डुप्लिकेट? https://stackoverflow.com/questions/9851133/ –