मान लीजिए कि हमारे पास बहु प्रोसेसर मशीन और बहु थ्रेडेड एप्लिकेशन हैं। यदि दो धागे को सिंक्रनाइज़ किए गए विधि तक पहुंच है और वे उसी समय निष्पादित हो गए हैं जो थ्रेड लॉक हो जाएगा? या क्या होगा?कौन सा धागा लॉक मिलेगा?
धन्यवाद
मान लीजिए कि हमारे पास बहु प्रोसेसर मशीन और बहु थ्रेडेड एप्लिकेशन हैं। यदि दो धागे को सिंक्रनाइज़ किए गए विधि तक पहुंच है और वे उसी समय निष्पादित हो गए हैं जो थ्रेड लॉक हो जाएगा? या क्या होगा?कौन सा धागा लॉक मिलेगा?
धन्यवाद
बिंदु "एक ही समय में" के रूप में ऐसी कोई बात नहीं है। दोनों में से एक लॉक प्राप्त करेगा, लेकिन आपके पास कोई जानने का कोई तरीका नहीं है।
ऐसी कोई चीज़ नहीं है "एक ही समय में" क्योंकि, उदारता से बोलते हुए, एक ताला कुछ है जो विशेष रूप से एक समय में धागे को चुनता है और निष्पादित करता है।
यह स्वाभाविक रूप से एक शुद्ध monoprocessor प्रणाली है कि एक समय में एक अनुदेश निष्पादित कर सकते हैं में पूरा किया है। मल्टीप्रोसेसर सिस्टम पर आमतौर पर कुछ हार्डवेयर डिवाइस होते हैं जो प्रोसेसर को "लॉक" करते हैं ताकि उन्हें एक ही समय में निष्पादित करने से रोका जा सके।
व्यवहार किया जाएगा गैर नियतात्मक (जो है, या तो धागा ताला मिल सकता है), और यह निष्पादन के लिए निष्पादन से भिन्न हो सकते हैं। ऐसा इसलिए है क्योंकि यह विशिष्ट जेवीएम कार्यान्वयन, और आपके धागे के विशेष शेड्यूलिंग पर निर्भर करता है।
इस लेख के अनुसार JVM विनिर्देश निष्पक्षता पर कोई प्रतिबंध नहीं डालता:
निष्पक्षता
जावा स्मृति मॉडल धागे या रिक्तिपूर्व बहु सूत्रण के लिए किसी भी निष्पक्षता आवश्यकता को निर्दिष्ट नहीं करता है। एक धागा सीपीयू को दूसरे धागे में आत्मसमर्पण करने से मना कर सकता है और सिस्टम को डेडलॉक में फेंक सकता है। अन्य धागे को निष्पक्षता के नियम व्यक्तिगत जेवीएम कार्यान्वयन द्वारा परिभाषित किए जाते हैं।
है, जब तक आप ध्यान से अपने कार्यक्रम को सिंक्रनाइज़, एक धागा सैद्धांतिक रूप से अनुसूचक द्वारा भूखे हो सकती है।
मुझे लगता है, वीएम को एक सिक्का टॉस करना होगा। –
http://stackoverflow.com/questions/3940164/java-waiting-on-synchronized-block-who-goes-first – Thilo
को कुछ हद तक संबंधित है कि क्या इसका मतलब वीएम अगर दोनों धागे पाने की कोशिश एक धागा भूखा अनुमति दी है एक पाश में ताला लगाओ? –