मुझे जावा में अस्थिर चर को समझने में थोड़ा कठिनाई हो रही है।क्या अस्थिर चर के लिए सिंक्रनाइज़ पहुंच की आवश्यकता है?
public class MyClass<T> {
private volatile T lastValue;
// ... other code ...
}
मैं सहित lastValue
के खिलाफ कुछ बुनियादी आपरेशन लागू करने के लिए एक मिल-मान-अगर-नहीं-अशक्त:
मैं एक पैरामिट्रीकृत वर्ग कि इतने की तरह एक अस्थिर चर शामिल है।
क्या इन परिचालनों को सिंक्रनाइज़ करने की आवश्यकता है? क्या मैं निम्नलिखित विधि करने से दूर हो सकता हूं?
public void doSomething() {
String someString;
...
if (lastValue != null) {
someString += lastValue.toString();
}
}
या क्या मुझे एक सिंक्रनाइज़ ब्लॉक में शून्य जांच को चिपकने की ज़रूरत है?
public void doSomething() {
String someString;
...
synchronized(this) {
if (lastValue != null) {
someString += lastValue.toString();
}
}
}
मुझे पता है कि हो और सेट की तरह परमाणु संचालन के लिए, मैं तुल्यकालन (जैसे। public T getValue() { return lastValue; }
) लागू किए बिना ठीक होना चाहिए। लेकिन मुझे गैर-परमाणु संचालन के बारे में निश्चित नहीं था।
'someString + = lastValue.toStrin();' के रूप में 'someString + = (" "+ lastValue);' की मदद से आप से छुटकारा पाने के 'null' पूरी तरह जाँच करें। – dasblinkenlight
@dasblinkenlight, सच है, लेकिन केवल तभी जब आप अपने परिणामस्वरूप स्ट्रिंग में "नल" शब्द के साथ ठीक हैं, तो आखिरी वैल्यू शून्य है। –
@IanMcLaird आह, आप सही हैं, मैं भूल गया कि जावा ऐसा करता है (यह .NET है जो ऐसा नहीं करता है)। – dasblinkenlight