मेरा प्रश्न यह संदर्भित करता है कि एक पुनर्वित्त लॉक का उपयोग किसी क्षेत्र के दृश्यता की गारंटी देता है जो सिंक्रनाइज़ किए गए कीवर्ड प्रदान करता है।क्या पुनर्विक्रेता लॉक के माध्यम से उपयोग किए जाने वाले फ़ील्ड के लिए अस्थिर कीवर्ड आवश्यक है?
उदाहरण के लिए, निम्नलिखित वर्ग एक, क्षेत्र sharedData अस्थिर घोषित करने के रूप में सिंक्रनाइज़ कीवर्ड प्रयोग किया जाता है की जरूरत नहीं है में।
class A
{
private double sharedData;
public synchronized void method()
{
double temp = sharedData;
temp *= 2.5;
sharedData = temp + 1;
}
}
हालांकि पुनर्वित्त लॉक का उपयोग करते हुए अगले उदाहरण के लिए, आवश्यक फ़ील्ड पर अस्थिर कीवर्ड है?
class B
{
private final ReentrantLock lock = new ReentrantLock();
private volatile double sharedData;
public void method()
{
lock.lock();
try
{
double temp = sharedData;
temp *= 2.5;
sharedData = temp + 1;
}
finally
{
lock.unlock();
}
}
}
मुझे पता है कि वैसे भी अस्थिर कीवर्ड का उपयोग केवल संभावना एक miniscule प्रदर्शन हिट लागू होगा, लेकिन मैं अभी भी सही ढंग से कोड करने के लिए करना चाहते हैं।
क्या यह सलाह फ़ील्ड hoisting के कारण 'जबकि (फ़ील्ड)' के संबंध में सच है? – Pod
@Pod: 'while' लूप लॉक के साथ कैसे इंटरैक्ट करता है, इसके बारे में अधिक विशिष्ट विवरण के बिना, यह कहना असंभव है। आप शायद एक विशिष्ट उदाहरण के साथ एक नया सवाल बनाना चाहते हैं। –