Java: Thread.currentThread ()। स्लीप (x) बनाम थ्रेड। स्लीप (x)


86

मेरे पास मेरे कोड में यह है

Thread.currentThread().sleep(x);

ग्रहण मुझे स्थैतिक का उपयोग करने के लिए कहता है

Thread.sleep(x); 

इसके बजाय, क्यों? क्या अंतर है, क्या इन 2 विधियों के बीच कार्यक्षमता में कुछ अंतर है?


1
एक्लिप्स में एक 'सेव एक्शन' है जो स्वचालित रूप से स्टैटिक मेंबर्स तक पहुंच को वैरिएबल एक्सेस के साथ क्लास नाम के जरिए स्टैटिक एक्सेस से रिप्लेस करेगा - इस सेव एक्शन को एनेबल करें और बाकी सेव ऐक्शन्स में से कई जिससे आप सहमत हैं (जैसे, अनावश्यक कास्ट हटाएं, अनावश्यक 'यह', आदि)।
लेस 2

जवाबों:


135

केवल एक विधि है, दो नहीं, और यह स्थिर है। हालांकि आप एक उदाहरण संदर्भ के माध्यम से एक स्थिर विधि कह सकते हैं, यह अच्छी शैली नहीं है। यह इंगित करता है कि प्रोग्रामर सोचता है कि वह एक आवृत्ति विधि कह रहा है। एक भ्रमित प्रोग्रामर सोच सकता है कि वह इस तरह से सोने के लिए एक और धागा (वर्तमान में नहीं) पैदा कर सकता है, जब वह ऐसा नहीं करता है।

आपके कोड की दोनों पंक्तियाँ समान कार्य करती हैं लेकिन दूसरी बेहतर शैली है।


24
+1 यह उल्लेख करने के लिए कि प्रोग्रामर कुछ थ्रेड.स्लीप () के माध्यम से एक विशेष थ्रेड स्लीप बनाना चाहता है, जिसे वह नहीं करता।
Chii

32

जावा में, नींद एक स्थिर विधि है। आपके दोनों उदाहरण बिल्कुल वैसा ही काम करते हैं, लेकिन पूर्व संस्करण भ्रमित कर रहा है क्योंकि ऐसा लगता है कि यह किसी विशिष्ट वस्तु पर एक विधि कह रहा है लेकिन ऐसा बिल्कुल नहीं है। आपके उदाहरण में यह ज्यादा मायने नहीं रखेगा, लेकिन यदि आपके पास निम्नलिखित है तो यह अधिक खतरनाक है:

someOtherThread.sleep(x);

इस बार ऐसा लग रहा है कि आप सोने के लिए कोई और धागा बता रहे हैं, लेकिन वास्तव में आप सोने के लिए मौजूदा धागा लगा रहे हैं। इस प्रकार की गलती से बचने का तरीका यह है कि किसी विशिष्ट वस्तु के बजाय हमेशा कक्षा का उपयोग करके स्थैतिक तरीकों को कॉल करें।


क्या आपका मतलब है कि currentThread और someOtherThread इस सिंगल लाइन "someOtherThread.sleep (x);" को निष्पादित करते हुए नींद के लिए जाएंगे। ??
काणगावेलु सुगुमार

3
नहीं, वर्तमान थ्रेड सोने जाएगा, चाहे वह थ्रेड ऑब्जेक्ट हो। स्लीप को कहा जाता है। आप अन्य थ्रेड्स को सोने के लिए नहीं रख सकते (जैसे)।
टॉर्क

3

दो विधि कॉल व्यवहार में समान हैं क्योंकि वे एक ही विधि का आह्वान करते हैं लेकिन स्थिर क्षेत्रों तक पहुँचने के लिए उदाहरण के बजाय वर्ग नाम ( थ्रेड इस मामले में) का उपयोग करके इस स्थैतिक-नेस को स्पष्ट करता है। इसी कारण यह चेतावनी उत्पन्न होती है।

लेकिन यह देखते हुए कि अधिकांश आईडीई में स्थिर क्षेत्रों और विधियों को एक विशेष तरीके से दिखाया गया है (उदाहरण के लिए ग्रहण और IntelliJ IDEA में इटैलिक फ़ॉन्ट में), क्या यह चेतावनी अभी भी आवश्यक है? शायद जावा के शुरुआती दिनों में उतना आवश्यक नहीं था जितना कि सरल संपादक उपयोग में थे।


0

Thread.currentThread().sleep(x);या जिस तरह से ग्रहण कहता है कि Thread.sleep(x);स्थैतिक संदर्भ की आवश्यकता है अगर यह आवश्यक है, तो हम इस नींद के साथ थोड़ी देर के लिए रोकते हैं।

एक वस्तु द्वारा निर्धारित स्थैतिक प्रतिमान, केवल उस विशेष वस्तु हीप प्रिंट जीवन चक्र को प्रभावित करता है, फिर से समग्र वस्तु जीवन चक्र के स्थैतिक को देखते हुए, यह कष्टप्रद नहीं है, यदि आवश्यक हो तो इसका उपयोग कोडिंग को आसान बनाने के लिए किया जा सकता है, लेकिन स्थिर पैर से सावधानीपूर्वक किया जा सकता है- प्रिंट को Classउदाहरण के लिए (उदाहरण के लिए: - Class.forName(pkg.className)) के नाम से जाना जाता है और स्मृति objectमें कक्षा की रन-टाइम सिंगल प्रिंट कॉपी द्वारा किसी भी नाम से नहीं HEAP

ऑब्जेक्ट के फिर से उपयोग में कमजोर, फैंटम, मजबूत तरह के संदर्भों द्वारा पेशेवरों और विपक्षों का भी है ....

कोड प्रकृति द्वारा संकलित है। यह सिर्फ तरीका है कि हम इसे कैसे काम करते हैं और कार्य करते हैं।


1
धागे के बारे में बात करने के लिए, - यह अतुल्यकालिक रूप से पैदा होता है, हालांकि हमारे पास थ्रेडिंग में सिंक्रोनस चीजें हो सकती हैं। स्वभाव से, सभी चीजें अतुल्यकालिक हैं, हालांकि हम ऐसी चीजों को पाते हैं जो कुछ समय में समकालिक होती हैं। कोई भी चीज़ समकालिक नहीं है यहाँ तक कि हम क्वांटम या खगोल विज्ञान को भी प्रभावित करते हैं।
देव आनंद सदाशिवम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.