आप क्या करने की कोशिश कर रहे हैं? synchronized
और volatile
कीवर्ड जावा में तंत्र हैं जिनका उपयोग यह सुनिश्चित करने के लिए किया जा सकता है कि एक ही डेटा को पढ़ने वाले विभिन्न धागे द्वारा लगातार मूल्यों को देखा जा सके। विशेष रूप से वे आपको के कारण होने की अनुमति देते हैं- आपके कार्यक्रमों में संबंधों से पहले।
आप बस ताकि ठीक से एक मल्टी-थ्रेडेड कार्यक्रम में गैर final
क्षेत्रों तक पहुँचने के लिए में volatile
या synchronized
से एक का उपयोग करने से बचने नहीं कर सकते। उस ने कहा, मुख्य कारण यह है कि आपको volatile
परमाणु का उपयोग करने की आवश्यकता है और संचालन (यानी सेट करें) यह पर कोई प्रदर्शन विचार नहीं होगा)। उदाहरण के लिए, एक मल्टी-थ्रेडेड कार्यक्रम में:
volatile int i = 0;
public void foo() {
if (i == 0) i = i + 1;
}
ऊपर कोड स्वाभाविक असुरक्षित है, भले ही अस्थिर अर्थ यह है कि रीड और राईट मुख्य स्मृति में प्लावित कर रहे हैं होने के रूप में चर की घोषणा - एक ऐसी की केवल सुरक्षित कार्यान्वयन विधि कुछ ऐसा होगा:
int i = 0;
public synchronized void foo() {
if (i == 0) i = i + 1;
}
तो आपको कौन सा पसंद करना चाहिए? खैर, यदि आपके पास उस फ़ील्ड के मान (यानी तुलना-सेट) पर निर्भर फ़ील्ड को संशोधित करने वाले एकाधिक थ्रेड हैं, तो synchronized
एकमात्र सुरक्षित समाधान है।
यह भी कहने लायक है: synchronized
का प्रदर्शन ओवरहेड कोई समस्या नहीं है (मामलों की भारी बहुमत में)। सिंक्रनाइज़ेशन-प्रदर्शन समस्याएं आमतौर पर अनावश्यक कोड बाधाओं, डेडलॉक्स या आजीविका के कारण होती हैं और यदि आवश्यक हो तो उन्हें कम किया जा सकता है। किसी भी शुद्ध घड़ी-चक्र भूमि के ऊपर अन्य बातों के आप आवेदन करता है द्वारा dwarfed किया जाएगा: फ़ाइल आईओ, डेटाबेस प्रश्नों, दूरस्थ बनाने आदि
स्रोत
2009-11-22 17:05:14
आप "अपनी [कक्षा] लॉक क्यों नहीं करना चाहते"? (ध्यान दें कि किसी इंस्टेंस विधि पर लॉक केवल ऑब्जेक्ट पर ही लिया जाता है)। ध्यान दें कि आधुनिक जेवीएम बेहद उन्नत हैं और सिंक्रनाइज़ेशन का प्रदर्शन ओवरहेड आमतौर पर कोई समस्या नहीं है –
मेरे पास एक jsp है जहां कई लोग डेटा एक्सेस/अपडेट करते हैं। डेटा एक कैश ऑब्जेक्ट में है और वहां मुझे इन सिंक्रनाइज़ेशन और एट अल की आवश्यकता है क्योंकि लोगों की संख्या कई हो सकती है। – DKSRathore
मुझे लगता है कि मुझे एओमिक डबल के साथ जाना चाहिए। – DKSRathore