प्रभावी जावा में:पढ़ना एक और धागे से साझा चर (प्रभावी जावा # 66)
// Broken! - How long would you expect this program to run
class StopThread {
private static boolean stopRequested = false;
public static void main(String[] args)
throws InterruptedException {
Thread backgroundThread = new Thread(new Runnable() {
public void run() {
int i = 0;
while (!stopRequested) {
i++;
}
}
});
backgroundThread.start();
TimeUnit.SECONDS.sleep(1);
stopRequested = true;
}
}
के रूप में यहोशू बलोच ने कहा, इस कार्यक्रम समाप्त नहीं होगा: आइटम 66, यहोशू बलोच जीवन विफलता के बारे में उदाहरण दिया । लेकिन, अगर मैं i++
को System.out.println(i++)
में बदलता हूं, तो यह सफलतापूर्वक समाप्त हो जाता है!
मैं यह नहीं समझ सकता कि यह कैसा होता है!
उत्तरों के स्वतंत्र, आपको यह भी विचार करने की आवश्यकता है कि पुस्तक 10 साल और 3 प्रमुख संस्करण पुरानी है। चीजें बदलती हैं, कभी-कभी। –
@ सेनपैट्रिकफ्लॉइड कभी-कभी वे नहीं करते हैं, हालांकि: आइटम में मौजूद व्यवहार अभी भी होता है। –
@ एंडी टर्नर मुझे पता है। यही कारण है कि मैंने इसे टिप्पणी के रूप में प्रदान किया, जवाब के रूप में –