2012-03-06 9 views
49

यदि मेरे पास जावा थ्रेड सोने के लिए कॉल करने जा रहा है, तो क्या इन फ़ॉर्मों में से एक को दूसरे पर पसंद करने का कोई कारण है?Thread.sleep बनाम TimeUnit.SECONDS.sleep

Thread.sleep(x) 

या

TimeUnit.SECONDS.sleep(y) 

उत्तर

78

TimeUnit.SECONDS.sleep(x)Thread.sleep कॉल करेंगे। एकमात्र अंतर पठनीयता है और TimeUnit का उपयोग करना संभवतः गैर स्पष्ट अवधि के लिए समझना आसान है (उदाहरण के लिए: Thread.sleep(180000) बनाम TimeUnit.MINUTES.sleep(3))।

संदर्भ के लिए, TimeUnit में sleep() का कोड नीचे देखें:

public void sleep(long timeout) throws InterruptedException { 
    if (timeout > 0) { 
     long ms = toMillis(timeout); 
     int ns = excessNanos(timeout, ms); 
     Thread.sleep(ms, ns); 
    } 
} 
+0

एफवाईआई: सेलेनियम प्रोजेक्ट में एक स्लीपर विधि है जिसे इसका उपयोग करते समय अपवाद को पकड़ने की आवश्यकता नहीं होती है: https://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/browserlaunchers /Sleeper.html – djangofan

+0

मैं सहमत हूं। यदि आप अपने सोने के समय को निरंतर स्थिर करना चाहते हैं, तो आप बाद में बदल सकते हैं, कहें, 1 मिनट से 10 सेकंड तक, एक समाधान 'सार्वजनिक स्थिर अंतिम लंबा SLEEPING_TIME = TimeUnit.MINUTES.toMillis (1); '। यह 'Thread.sleep()' की अनुमति देता है लेकिन 'TimeUnit' के पठनीयता लाभ को बनाए रखता है। –

7

वे एक ही हैं। मैं उत्तरार्द्ध पसंद करते हैं क्योंकि यह अधिक वर्णनात्मक है और समय इकाई (TimeUnit देखें) चुनने के लिए अनुमति देता है: DAYS, HOURS, MICROSECONDS, MILLISECONDS, MINUTES, NANOSECONDS, SECONDS

+4

तर्कसंगत: मैं पहले पसंद करता हूं - मैं धागा को सोना चाहता हूं, न कि 'SECONDS' या' मिलीबिसेन्ड्स '[:-) –

+2

@ करलोस हेबेगर: ठीक है, आप इसे * x 'SECONDS' * के लिए नींद के रूप में पढ़ सकते हैं, लेकिन निश्चित रूप से यह स्वाद का मामला है। दूसरी तरफ, ध्यान दें कि 'थ्रेड' पर 'नींद() 'स्थिर' विधि है - इसलिए कोई तर्क दे सकता है कि यह स्पष्ट नहीं है कि कौन सा धागा सोना है (' थ्रेड myThread = ...; myThread .sleep() 'मतलब?) –

+3

@ करलोस हेबरगर लिखने में सक्षम होने के लिए बेहतर होगा 'थ्रेड.sleep (3, टाइमयूनिट.एससीओएनडीएनएस)' – assylias

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