java - What does "thread-safe" really mean? -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 17 उत्तरों

अभ्यास में जावा संवादात्मकता से:

<पूर्व> पैकेज net.jcip.examples; आयात करें java.util.concurrent.atomic। *; / ** * नंबर रेंज * & lt; p / & gt; * संख्या श्रेणी वर्ग जो अपने अपूर्व्यों * * @ लेखक ब्रायन गोएत्ज़ और टिम पेअरल्स * / सार्वजनिक वर्ग संख्या श्रेणी के लिए पर्याप्त रूप से सुरक्षा नहीं करता है {// अन्वेषक: कम & lt; = ऊपरी निजी फाइनल परमाणुइंटर कम = नया परमाणुइंटर (0); निजी अंतिम परमाणुइन्टेगर ऊपरी = नया परमाणुइंटर (0); सार्वजनिक शून्य सेट लाउअर (इंट आई) {// चेतावनी - असुरक्षित चेक-तो-कार्य यदि (i & gt; ऊपरी.गेट) नए अवैध अवैध रूप से हटाएं अपवाद ("" + I + "& gt; ऊपरी" ); lower.set (i); } सार्वजनिक शून्य सेट अपपर (इंट आई) {// चेतावनी - असुरक्षित जांच-फिर-कार्य अगर (i & lt; लो.गेट ()) नया अवैध बेतरंगी निष्कर्ष निकालना ("ऊपरी" + i + "+ l +; "); upper.set (i); } पब्लिक बूलियन इंकरेन्ज (इंट आई) {रिटर्न (आई & gt; = कम.गेट) और amp; i & lt; = upper.get ()); }}

यह कहते हैं, "दोनों setLower और setupper जांच-तो-कार्य अनुक्रम हैं, लेकिन वे पर्याप्त लॉकिंग का उपयोग नहीं करते हैं उन्हें परमाणु बनाओ यदि संख्या सीमा (0, 10) धारण करती है, और एक धागा कॉल setLower (5) है, तो एक और धागा कॉल setUpper (4) , कुछ अशुभ समय के साथ दोनों पास हो जाएगा सेटर्स में जांच और दोनों संशोधनों को लागू किया जाएगा। परिणाम यह है कि सीमा अब (5, 4) एक अवैध राज्य रखती है। "

अगर परमाणुइंटेजर s थ्रेड-सुरक्षित है, तो क्या मुझे कुछ बिंदु याद आये? और यह कैसे तय किया जा सकता है?

AtomicInteger की संलिप्तता के लिए कुछ नहीं करना है आपके प्रश्न की धागा सुरक्षा के साथ।

यहां समस्या है:

  1. यदि (i> ऊपरी। हो जाओ)
  2. lower.set (i चरण 1 और 2 अलग-अलग परमाणु हो सकते हैं, लेकिन एक साथ वे एक दो कदम, गैर-परमाणु, क्रिया बनाते हैं।

    यहाँ क्या हो सकता है:

  • अन्य थ्रेड कॉल ऊपरी.सेट (q) जैसे कि q & lt;
  • इस धागे पर संदर्भ स्विच करें।
  • निचला I पर सेट है।
  • प्रत्येक व्यक्तिगत कदम प्रकृति परमाणु है, लेकिन संग्रह

    इस के लिए एक जावा समाधान है:

    1. सिंक्रनाइज़ (some_object_reference, शायद यह)
    2. {
    3. < Li> यदि (i> ऊपरी। हो जाओ)
    4. कम .सेट (i)
    5. }

    हमें एक ही ऑब्जेक्ट संदर्भ सुनिश्चित करें ऊपरी और निचले मानों की सभी सेटिंग को सिंक्रनाइज़ करने के लिए।


    Comments