2011-10-21 23 views
5

मैं डिजाइन पैटर्न सीखने की कोशिश कर रहा हूं। This sitesynchronized कीवर्ड का उपयोग करता है, लेकिन मुझे नहीं लगता कि यह क्या करता है।जावा में "सिंक्रनाइज़" का अर्थ क्या है?

मैंने नेट पर खोज की और पाया कि यह कुछ हद तक बहु थ्रेडिंग और मेमोरी से संबंधित है, लेकिन मैं एक यांत्रिक इंजीनियर हूं और इसका अर्थ समझ में नहीं आता है।

क्या कोई मुझे धागे और synchronized कीवर्ड समझने में मदद कर सकता है?

+3

'synchronized' जावा विशिष्ट खोजशब्द है। –

+1

लिंक में कोड सी ++ नहीं है। – Skizz

+1

पहला बिंदु यह है कि आपके द्वारा लिंक किए गए कोड नमूने जावा नहीं हैं C++। –

उत्तर

12

सी ++ में कोई synchronized कीवर्ड नहीं है।

वहाँ जावा में एक है, हालांकि, जहां तरीकों it means the following two things के लिए है:

  • यह एक ही वस्तु पर सिंक्रनाइज़ तरीकों बिछा के दो आमंत्रण के लिए संभव नहीं है। जब एक थ्रेड किसी ऑब्जेक्ट के लिए एक सिंक्रनाइज़ विधि को निष्पादित कर रहा है, तो अन्य सभी थ्रेड जो ऑब्जेक्ट के साथ पहले थ्रेड किए जाने तक उसी ऑब्जेक्ट ब्लॉक (निष्पादन को निलंबित) के लिए सिंक्रनाइज़ किए गए तरीकों का आह्वान करते हैं।
  • जब एक सिंक्रनाइज़ विधि बाहर निकलती है, तो यह स्वचालित रूप से एक ही ऑब्जेक्ट के लिए एक सिंक्रनाइज़ विधि के किसी भी बाद के आमंत्रण के साथ होता है। यह गारंटी देता है कि वस्तु की स्थिति में परिवर्तन सभी धागे के लिए दृश्यमान हैं।

Similar rules apply to arbitrary blocks

इसके अलावा, मैं एक सहकर्मी-समीक्षा पुस्तक से सीखने की सलाह देता हूं, कुछ मनमाने ढंग से गैर-आधिकारिक वेबसाइट नहीं।

+0

बहुत धन्यवाद @tomalak :) –

+0

@CAD_coding: कोई समस्या नहीं –

8

(जावा) उदाहरण

public static synchronized Singleton getInstance() 

में मतलब है कि एक समय में केवल एक धागा getInstance() विधि यह एक रेसिंग हालत से बचने के लिए उपयोग करने में सक्षम होना चाहिए।

+0

केवल _per-object।_ –

+0

@anders बहुत बहुत धन्यवाद जो बहुत उपयोगी था –

3

जैसा कि टिप्पणीकर्ता पहले से ही इंगित करते हैं, सिंक्रनाइज़ एक जावा कीवर्ड है।

इसका मतलब है कि विधि को एक ही समय में दो धागे द्वारा निष्पादित नहीं किया जा सकता है और JVM इसे लागू करने का ख्याल रखता है।

सी ++ में, आपको कुछ सिंक्रनाइज़ेशन निर्माण का उपयोग करना होगा, जैसे कि एक महत्वपूर्ण अनुभाग या म्यूटेक्स। आप this से परामर्श कर सकते हैं।

0

यदि कोई थ्रेड डेटा पढ़ने की कोशिश करता है और अन्य थ्रेड उसी डेटा को अपडेट करने का प्रयास करता है, तो यह असंगत स्थिति की ओर जाता है।

इसे डेटा पर एक्सेस सिंक्रनाइज़ करके रोका जा सकता है। उपयोग "सिंक्रनाइज़" विधि:

public synchronized void update() 
{ 
… 
} 
संबंधित मुद्दे