如果希望人为地控制线程,使正在执行的线程暂停,将 CPU 让给别的线程,这时可以使用静态方法 sleep ( long millis )
,该方法可以让当前正在执行的线程暂停一段时间,进人休眠等待状态。sleep ( long millis )
方法声明抛出InterruptedException 异常,因此在调用该方法时应该捕获异常,或者声明抛出该异常。
案例 ExampleM08:
public class ExampleM08 {
public static void main(String[] args) throws Exception{
//创建一个线程
new Thread(new SleepThread()).start();
for (int i=1;i<=10;i++) {
if (i==5) {
Thread.sleep(2000); //当前线程休眠 2秒
}
System.out.println("主线程正在输出:"+i);
Thread.sleep(500); //当前线程休眠 500毫秒
}
}
}
//定义 SleepThread类实现 Runnable接口
class SleepThread implements Runnable {
public void run() {
for (int i=1;i<=10;i++) {
if (i==3) {
try {
Thread.sleep(2000); //当前线程休眠 2秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("线程一正在输出:"+i);
try {
Thread.sleep(500); //当前线程休眠 500毫秒
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
在线程一的 for 循环中,当i=3时,调用了 Thread 的 sleep (2000)方法(代码的第20行左右),使线程休眠2s。从运行结果可以看出,主线程输出2后,线程一没有交替输出3,而是主线程接着输出了3和4,这说明了线程一进人了休眠等待状态。
在主线程的 for 循环中,当i=5时,也调用了 Thread 的 sleep (2000)方法(代码的第7行左右),使线程休眠2s。从运行结果可以看出,在主线程输出4后,下面连续4句话都是线程一输出的。只有当主线程2s休眠完毕后,两个线程才会恢复交替执行。
需要注意的是,sleep()是静态方法,只能控制当前正在运行的线程休眠,而不能控制其他程序休眠。当休眠时间结束后,线程就会返回到就绪状态,而不是立即开始运行。