2.4 线程的休眠
2016-05-31 21:45:15
4,749
0
线程对象一旦调用其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
)了这个线程的执行抛出的。中断的作用是,如果一个线程在运行期,我们不想其继续运行下去了,就可以给其发送一个信号,让其停止运行。注意中断和休眠的区别,中断是让线程停止运行,而休眠只是暂停运行,等到休眠时间过后,可以继续执行。在下一节我们会详细的讲解中断相关的知识。