Thread.sleep เทียบกับ TimeUnit.SECONDS.sleep


94

ถ้าฉันจะเรียกให้ Java Thread เข้าสู่โหมดสลีปมีเหตุผลไหมที่จะต้องเลือกรูปแบบเหล่านี้มากกว่าอีกรูปแบบหนึ่ง?

Thread.sleep(x)

หรือ

TimeUnit.SECONDS.sleep(y)

1
อีกทางเลือกหนึ่งคือThread.sleep(Duration.ofSeconds(s).toMillis())
ขมขื่น

คำตอบ:


130

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);
    }
}

FYI: โครงการ Selenium มีวิธี Sleeper ที่ไม่ต้องจับข้อยกเว้นเมื่อใช้: selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/…
djangofan

1
ฉันเห็นด้วย. หากคุณต้องการที่จะประกาศเวลานอนของคุณคงที่ที่คุณสามารถเปลี่ยนภายหลังการพูดตั้งแต่ 1 นาทีถึง 10 public static final long SLEEPING_TIME = TimeUnit.MINUTES.toMillis(1);วินาทีซึ่งเป็นหนึ่งในการแก้ปัญหาคือ นี้จะช่วยให้แต่ยังคงรักษาความได้เปรียบในการอ่านของThread.sleep() TimeUnit
Ole VV

9

พวกเขาก็เหมือน ๆ กัน. ฉันชอบที่หลังเพราะมันเป็นอธิบายเพิ่มเติมและช่วยให้การเลือกหน่วยเวลา (ดูTimeUnit): DAYS, HOURS, MICROSECONDS, MILLISECONDS, MINUTES, ,NANOSECONDSSECONDS


5
อาร์กิวเมนต์: ฉันชอบแบบแรก - ฉันต้องการให้เธรดนอนหลับไม่ใช่SECONDSหรือMILLISECONDS[:-)
user85421

3
@CarlosHeuberger: คุณสามารถอ่านได้ว่าsleep สำหรับ xSECONDSแต่แน่นอนว่ามันเป็นเรื่องของรสชาติ ในทางกลับกันโปรดทราบว่าsleep()เป็นstaticวิธีการThread- ดังนั้นอาจมีคนแย้งว่าไม่ชัดเจนว่าเธรดใดที่ควรนอนหลับ ( Thread myThread = ...; myThread.sleep()หมายความว่าอะไร)
Tomasz Nurkiewicz

6
@CarlosHeuberger จะดีกว่ามากที่จะสามารถเขียนได้Thread.sleep(3, TimeUnit.SECONDS)
assylias

อัปเดตเพื่อขจัดความสับสนเกี่ยวกับความเท่าเทียมกันเนื่องจากหน่วยที่เลือก
Rachel

@assylias ฉันเห็นด้วย แต่น่าเสียดายที่ฉันไม่สามารถเปลี่ยนแปลงได้ [: - |
user85421
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.