Thread.sleep
是 Java 编程语言中的一个方法,用于让当前正在执行的线程暂停执行指定的时间段。这个方法属于 java.lang.Thread
类,并且是一个静态方法,可以直接通过类名调用。
当调用 Thread.sleep
方法时,当前线程会进入阻塞状态,不会消耗 CPU 资源,直到指定的时间过去后,线程才会恢复到可运行状态,并等待 CPU 时间片来继续执行。
public static void sleep(long millis) throws InterruptedException
millis
:线程休眠的时间,以毫秒为单位。InterruptedException
:如果一个线程在等待、睡眠或以其他方式占用时被中断,那么它将抛出此异常。public class SleepExample {
public static void main(String[] args) {
System.out.println("开始执行...");
try {
// 让当前线程休眠 3 秒
Thread.sleep(3000);
} catch (InterruptedException e) {
// 当线程被中断时,会抛出此异常
e.printStackTrace();
}
System.out.println("休眠结束,继续执行...");
}
}
Thread.sleep
方法会抛出 InterruptedException
,因此需要使用 try-catch 语句来处理这个异常。Thread.sleep
来控制线程的执行顺序并不是最佳实践,因为它依赖于线程调度器的实现,可能会导致不可预测的行为。更好的做法是使用同步机制,如 wait
和 notify
,或者使用并发工具类,如 CountDownLatch
、CyclicBarrier
等。问题:线程在休眠时被中断,导致程序异常终止。
原因:当线程在休眠状态时,如果另一个线程调用了该线程的 interrupt()
方法,那么休眠的线程会立即抛出 InterruptedException
。
解决方法:捕获 InterruptedException
异常,并根据需要进行处理。例如,可以重新设置中断状态,或者优雅地退出线程。
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// 重新设置中断状态
Thread.currentThread().interrupt();
// 或者进行其他处理
}
总之,Thread.sleep
是一个简单但强大的工具,可以用来控制线程的执行节奏,但在使用时需要注意异常处理和线程同步的问题。
领取专属 10元无门槛券
手把手带您无忧上云