ถ้าฉันจะเรียกให้ Java Thread เข้าสู่โหมดสลีปมีเหตุผลไหมที่จะต้องเลือกรูปแบบเหล่านี้มากกว่าอีกรูปแบบหนึ่ง?
Thread.sleep(x)
หรือ
TimeUnit.SECONDS.sleep(y)
ถ้าฉันจะเรียกให้ Java Thread เข้าสู่โหมดสลีปมีเหตุผลไหมที่จะต้องเลือกรูปแบบเหล่านี้มากกว่าอีกรูปแบบหนึ่ง?
Thread.sleep(x)
หรือ
TimeUnit.SECONDS.sleep(y)
คำตอบ:
TimeUnit.SECONDS.sleep(x)
จะโทรThread.sleep
. ข้อแตกต่างเพียงอย่างเดียวคือความสามารถในการอ่านและการใช้งานTimeUnit
อาจจะเข้าใจได้ง่ายกว่าสำหรับระยะเวลาที่ไม่ชัดเจน (ตัวอย่างเช่น: Thread.sleep(180000)
vs.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())