2011-08-20 12 views
9

मुझे आश्चर्य है अगर एक अस्थिर चर के लिए लिख, याद करने के लिए सभी गैर अस्थिर चर सिंक्रनाइज़ करने के लिए तो उदाहरण के लिए, क्या निम्नलिखित कोड में होगा JVM के लिए बाध्य करेगा:एक अस्थिर चर को लिखने के बाद क्या होता है?

volatile int x; 
int y; 

y=5; 
x=10; 

एक्स स्मृति को लिखा जाएगा , लेकिन वाई के साथ क्या होगा? क्या यह स्मृति में भी लिखा जाएगा?

+1

वाई को अस्थिर घोषित नहीं किया गया है ...? –

+1

नहीं, जानबूझकर इसे अस्थिर घोषित नहीं किया गया है। और सवाल यह है कि अगर एक अस्थिर चर को लिखना मतलब है तो सभी चर के लिए स्मृति बाधा। – Anonymice

+0

मुझे लगता है कि यह जावा के आपके संस्करण पर निर्भर करेगा ... –

उत्तर

5

हां, the Java Language Specification (third edition) -- in particular section 17.4.4 के नियमों के तहत - x के नए मूल्य को देखे जाने वाले प्रत्येक थ्रेड को बाद में y का नया मान भी दिखाई देगा यदि वे इसे पढ़ने का प्रयास करते हैं। x को पढ़ने वाले थ्रेड प्रभावित होने की गारंटी नहीं है।

सावधान रहें, हालांकि, यह गारंटी जेएलएस के दूसरे संस्करण के मेमोरी मॉडल में मौजूद नहीं थी। वहां, अस्थिर पढ़ने और लिखने से गैर-अस्थिर स्मृति पहुंच के क्रम पर कोई प्रभाव नहीं पड़ा।

+1

उन सभी लोगों के लिए जो वास्तविक जावा संस्करणों के लिए भाषा spec के संस्करणों को मैप करने में सक्षम नहीं हैं: इसका मतलब है कि हेनिंग का वर्णन जावा 1.5 से ऊपर से सच है;) – Voo

संबंधित मुद्दे