थ्रेड.स्लीप बनाम टाइम यूनीट.सेनोड्स.स्लीप


91

अगर मैं एक जावा थ्रेड को सोने के लिए कॉल करने जा रहा हूं, तो क्या इन कारणों में से एक को दूसरे पर पसंद करने का कोई कारण है?

Thread.sleep(x)

या

TimeUnit.SECONDS.sleep(y)

1
एक अन्य विकल्प हैThread.sleep(Duration.ofSeconds(s).toMillis())
कपटपूर्ण

जवाबों:


126

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

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

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

FYI करें: सेलेनियम परियोजना में एक स्लीपर विधि है जिसका उपयोग करते समय अपवाद को पकड़ने की आवश्यकता नहीं होती है: selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/…
dangangofan

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

8

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


5
तार्किक: मैं पहली बार पसंद करते हैं - मैं सोने के लिए धागा चाहते हैं, नहीं SECONDSया MILLISECONDS[:-)
user85421

3
@CarlosHeuberger: ठीक है, आप इसे एक्स के लिए नींद केSECONDS रूप में पढ़ सकते हैं , लेकिन निश्चित रूप से यह स्वाद का मामला है। दूसरी ओर, ध्यान दें कि sleep()यह staticविधि है Thread- इसलिए कोई यह तर्क दे सकता है कि यह स्पष्ट नहीं है कि कौन सा धागा सोने के लिए है ( Thread myThread = ...; myThread.sleep()इसका क्या मतलब है?)
टॉमस नर्कविक्ज़

6
@CarlosHeuberger बहुत बेहतर होगा कि वह लिखने में सक्षम होThread.sleep(3, TimeUnit.SECONDS)
assylias

चुनिंदा इकाइयों के कारण समतुल्यता के बारे में किसी भी भ्रम को दूर करने के लिए अद्यतन
राहेल

@assylias मैं सहमत हूँ, लेकिन दुर्भाग्य से मैं इसे बदलने में सक्षम नहीं हूँ [: - |
user85421
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.