अगर मैं एक जावा थ्रेड को सोने के लिए कॉल करने जा रहा हूं, तो क्या इन कारणों में से एक को दूसरे पर पसंद करने का कोई कारण है?
Thread.sleep(x)
या
TimeUnit.SECONDS.sleep(y)
जवाबों:
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);
}
}
public static final long SLEEPING_TIME = TimeUnit.MINUTES.toMillis(1);
। यह अनुमति देता है Thread.sleep()
लेकिन पठनीयता का लाभ बनाए रखता है TimeUnit
।
वह एक जैसे है। मैं उत्तरार्द्ध पसंद करते हैं क्योंकि यह अधिक वर्णनात्मक है और समय इकाई (देखें चुनने की अनुमति देता TimeUnit
): DAYS
, HOURS
, MICROSECONDS
, MILLISECONDS
, MINUTES
, NANOSECONDS
, SECONDS
।
SECONDS
या MILLISECONDS
[:-)
SECONDS
रूप में पढ़ सकते हैं , लेकिन निश्चित रूप से यह स्वाद का मामला है। दूसरी ओर, ध्यान दें कि sleep()
यह static
विधि है Thread
- इसलिए कोई यह तर्क दे सकता है कि यह स्पष्ट नहीं है कि कौन सा धागा सोने के लिए है ( Thread myThread = ...; myThread.sleep()
इसका क्या मतलब है?)
Thread.sleep(3, TimeUnit.SECONDS)
Thread.sleep(Duration.ofSeconds(s).toMillis())