线程的休眠
线程的休眠
线程对象一旦调用其start
方法之后,就会运行,运行的就是run
方法中的代码,等到run
方法中的代码运行结束,线程就执行完成。
如果我们想在线程运行的时候,让其暂停一会,可以调用线程sleep方法,sleep方法的作用是让线程进行休眠,意思是线程暂停执行。在执行的休眠时间内,该线程是不会请求CPU进行执行,因此其他线程可以获得更多的运行机会。
暂停是有实际的作用的,例如我们想检查远程服务器的运行状态,为了可以一直进行检查,我们可能会将检查服务器运行状况的代码放在一个死循环中。但是频繁的发送请求可能又会给服务器造成压力,因此我们可能是希望每隔几秒中去检查一次,这实际上就是一个简易定时器的作用(在Java中,定时器有一个专门的类叫做Timer
)。
以下代码用于演示线程的休眠:
public class SleepDemo {
public static void main(String[] args) {
new Thread(){
@Override
public void run() {
//我们希望不断的去检查服务器的状态,所以讲将检查的代码放入一个死循环中
while (true){
//用打印一句话表示检查服务器状态
System.out.println("检查服务器状态....当前时间:"+new Date().toLocaleString());
try {
//休眠3秒,以免检查台频繁
this.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
}
以上程序的运行结果:
检查服务器状态....当前时间:2016-5-31 21:36:28
检查服务器状态....当前时间:2016-5-31 21:36:31
检查服务器状态....当前时间:2016-5-31 21:36:34
检查服务器状态....当前时间:2016-5-31 21:36:37
....
可以看到的确是每隔3秒执行一次!
注意sleep方法抛出了一个InterruptedException异常。这个异常是在线程还在休眠的时候,如果其他的线程中断(interrupt
)了这个线程的执行抛出的。中断的作用是,如果一个线程在运行期,我们不想其继续运行下去了,就可以给其发送一个信号,让其停止运行。注意中断和休眠的区别,中断是让线程停止运行,而休眠只是暂停运行,等到休眠时间过后,可以继续执行。在下一节我们会详细的讲解中断相关的知识。
还没有评论,来说两句吧...