जब थ्रेड टीए कॉल tB.join () इसके कारण न केवल टीबी के मरने या tA के बाधित होने का इंतजार करता है बल्कि tB में अंतिम स्टेटमेंट और tB.join () के बाद अगले स्टेटमेंट के बीच संबंध बनाने से पहले होता है।
किसी थ्रेड में सभी क्रियाएं होती हैं-इससे पहले कि कोई अन्य थ्रेड सफलतापूर्वक उस थ्रेड पर सम्मिलित () से वापस आ जाए।
इसका मतलब है कार्यक्रम
class App {
// shared, not synchronized variable = bad practice
static int sharedVar = 0;
public static void main(String[] args) throws Exception {
Thread threadB = new Thread(() -> {sharedVar = 1;});
threadB.start();
threadB.join();
while (true)
System.out.print(sharedVar);
}
}
हमेशा प्रिंट करें
>> 1111111111111111111111111 ...
लेकिन कार्यक्रम
class App {
// shared, not synchronized variable = bad practice
static int sharedVar = 0;
public static void main(String[] args) throws Exception {
Thread threadB = new Thread(() -> {sharedVar = 1;});
threadB.start();
// threadB.join(); COMMENT JOIN
while (true)
System.out.print(sharedVar);
}
}
न केवल मुद्रित कर सकते हैं
>> 0000000000 ... 000000111111111111111111111111 ...
परंतु
>> 00000000000000000000000000000000000000000000 ...
हमेशा केवल '0'।
क्योंकि जावा मेमोरी मॉडल को हेपरेंस-रिलेशन (थ्रेड स्टार्ट, थ्रेड जॉइन, 'सिंक्रोनाइज्ड' कीवर्ड का उपयोग, एटॉमिकएक्सएक्सएक्सएक्स वैरिएबल आदि का उपयोग) के बिना थ्रेड से मुख्य थ्रेड तक 'शेयर्ड वीयर' के नए मूल्य को 'ट्रांसफर' करने की आवश्यकता नहीं है।