介绍
Java的Thread.sleep()
方法可用于暂停当前线程的执行,时间以毫秒为单位指定。毫秒的参数值不能为负。否则,会抛出IllegalArgumentException
异常。
sleep(long millis, int nanos)
是另一个方法,可用于暂停当前线程的执行,时间以毫秒和纳秒指定。允许的纳秒值介于0
和999999
之间。
在本文中,您将了解Java的Thread.sleep()
。
Thread.sleep的工作原理
Thread.sleep()
与线程调度程序交互,将当前线程置于等待状态,等待指定的时间段。一旦等待时间结束,线程状态将更改为可运行状态,并等待CPU进一步执行。当前线程实际休眠的时间取决于作为操作系统一部分的线程调度程序。
Java Thread.sleep 的重要点
- 它总是暂停当前线程的执行。
- 线程实际休眠并开始执行的时间取决于系统定时器和调度程序。对于安静的系统,休眠的实际时间接近指定的休眠时间,但对于繁忙的系统,它会稍长一些。
Thread.sleep()
不会丢失任何监视器或锁定当前已获取的线程。- 任何其他线程都可以在休眠期间中断当前线程,在这种情况下会抛出
InterruptedException
。
Java Thread.sleep 示例
下面是一个示例程序,其中使用 Thread.sleep()
暂停主线程的执行 2 秒钟(2000 毫秒):
ThreadSleep.java
package com.journaldev.threads;
public class ThreadSleep {
public static void main(String[] args) throws InterruptedException {
long start = System.currentTimeMillis();
Thread.sleep(2000);
System.out.println("Sleep time in ms = " + (System.currentTimeMillis() - start));
}
}
首先,此代码将当前系统时间以毫秒为单位存储。然后,它休眠 2000 毫秒。最后,此代码打印出新的当前系统时间减去上一个当前系统时间:
OutputSleep time in ms = 2005
注意,这个差异并不精确为 2000 毫秒。这是由于 Thread.sleep()
的工作方式以及线程调度程序的操作系统特定实现所致。
结论
在这篇文章中,您了解了Java的Thread.sleep()
。
通过更多的Java教程继续学习。
Source:
https://www.digitalocean.com/community/tutorials/thread-sleep-java