线程的休眠就是把当前正在运行的线程挂起一段时间(时间值由参数传入),挂起时间到期后,JVM会在适当的时间再次唤醒该线程。
Thread类的sleep()方法可以让当前线程休眠,sleep()方法说明如下:
sleep (long millis) throws InterruptedException
该方法用于在指定的millis毫秒内让当前正在执行的线程休眠(暂停执行),该方法的执行可能会抛出InterruptedException异常,因此需要将sleep()方法的调用放在try-catch块中。
案例1:建立ThreadSleep类,并在run()方法中编写线程功能代码。
在thread包下新建ThreadSleep类。代码如下:
package thread;
/**
* @ClassName: ThreadSleep
* @Description: 多线程操作(线程的休眠)案例1
* @author 编程训练营
* @date
*
*/
public class ThreadSleep extends Thread{
/**
* <p>Title: run</p>
* <p>Description: </p>
* @see java.lang.Thread#run()
*/
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
for( int i = 0; i<100; i++ ) {
System.out.println("MyRunner:" + i);
try {
System.out.println(Thread.currentThread().getName()+ "休眠0.5秒!");
//自身线程挂起500毫秒
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}ThreadSleep类在每次循环都会调用Thread类的sleep方法将自身线程挂起500毫秒,然后再继续执行。
在thread包下新建ThreadSleepTest测试类,启动ThreadSleep线程。代码如下:
package thread;
/**
* @ClassName: ThreadSleepTest
* @Description: 多线程操作(线程的休眠)案例1
* @author 编程训练营
* @date
*
*/
public class ThreadSleepTest {
/**
* @Title: main
* @Description: Java程序入口main方法
* @param @param args 参数
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
// 实例化MyThread对象
ThreadSleep thread = new ThreadSleep();
// 调用Thread类的strat()方法启动线程
thread.start();
try {
//主线程挂起1000毫秒
System.out.println(Thread.currentThread().getName()+ "休眠1秒!");
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}在ThreadSleepTest类主线程启动子线程后,应用Thread类的sleep方法将主线程挂起1000毫秒,因为sleep方法抛出InterruptedException异常,因此调用sleep方法时,需要包含在try-cahtch语句,用于捕获sleep方法可能抛出的异常。
程序执行结果如下图所示:
