休眠是让线程终止执行给定的时间。Java提供了两种方式来实现线程休眠:
- Thread.sleep(long time)
- TimeUnit.SECONDS.sleep(long time)
其中,TimeUnit的JDK1.5引入的,并且也是推荐使用的,因为它提供来更好的可读性。
public class SleepDemo implements Runnable{
@Override
public void run() {
try {
synchronized (SleepDemo.class) {
System.out.println(Thread.currentThread().getName() + " running...."); System.out.println(Thread.currentThread().getName() + " sleep start");
//Thread.sleep(1000);
TimeUnit.SECONDS.sleep(2);
System.out.println(Thread.currentThread().getName() + " sleep end");
}
}catch (InterruptedException ex) {
}
}
public static void main(String[] args) {
new Thread(new SleepDemo(), "Thread1").start();
new Thread(new SleepDemo(), "Thread2").start();
}
}
输出结果为:
Thread1 running....
Thread1 sleep start
Thread1 sleep end
Thread2 running....
Thread2 sleep start
Thread2 sleep end
当线程睡眠时,会释放cpu时钟,但并不会释放线程锁。
线程休眠的常见应用场景是测试,有时也会利用休眠来等待某个预加载任务的完成,但这是很危险的行为,因为资源加载时间是不确定的。