线程睡眠的方法:
在 Java 中,让线程休眠的方法有很多,这些方法大致可以分为两类,一类是设置时间,在一段时间后自动唤醒,而另一个类是提供了一对休眠和唤醒的方法,在线程休眠之后,可以在任意时间对线程进行唤醒。
线程睡眠的方法有以下 5 个:
- Thread.sleep
- TimeUnit
- wait
- Condition
- LockSupport
其中 sleep 和 TimeUnit 是让线程睡眠一段时间后自动唤醒,而 wait、Condition、LockSupport 提供了一对休眠和唤醒线程的方法,可以实现任意时刻唤醒某个线程。
方法1:Thread.sleep
Thread类的sleep()方法用于在指定的时间内睡眠线程。
java中sleep()方法的语法Thread类为睡眠线程提供了两种方法:
public static void sleep(long miliseconds)throws InterruptedException
public static void sleep(long miliseconds, int nanos)throws InterruptedException
以上程序的执行结果如下图所示:
class TestSleepMethod1 extends Thread {
public void run() {
for (int i = 1; i < 5; i++) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
System.out.println(e);
}
System.out.println(i);
}
}
public static void main(String args[]) {
TestSleepMethod1 t1 = new TestSleepMethod1();
TestSleepMethod1 t2 = new TestSleepMethod1();
t1.start();
t2.start();
}
}
以上程序的执行结果如下所示:
1 1 2 2 3 3 4 4
方法2:TimeUnit
sleep 方法因为要传递一个毫秒类型的参数,因此在设置大一点的时间时比较麻烦,比如设置 1 小时或 1 天时,此时我们就可以使用 TimeUnit 来替代 sleep 方法实现休眠。
TimeUnit 的功能和 sleep 一样,让线程休眠 N 个单位时间之后自动唤醒,它的基础用法如下:
以上程序的执行结果如下图所示:
Thread t1 = new Thread() {
@Override
public void run() {
System.out.println("线程执行:" + LocalDateTime.now());
try {
TimeUnit.SECONDS.sleep(1); // 休眠 1s
//TimeUnit.DAYS.sleep(1); // 休眠 1 天
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程结束:" + LocalDateTime.now());

本文主要介绍Java中线程睡眠的相关知识。阐述了Thread.sleep、TimeUnit等5种线程睡眠方法,对比了自动唤醒和可任意唤醒的两类方法。说明了线程睡眠可控制执行时间、均衡CPU资源。同时指出使用时的注意事项,如捕获异常、选对时间单位等,并列举了定时器、并发控制等应用场景。
883

被折叠的 条评论
为什么被折叠?



