摘要:java线程休眠,线程的优先级,优先级高的程序会先执行,而优先级低的程序会后执行,java 线程 休眠。以下是我们为大家整理的,相信大家阅读完后肯定有了自己的选择吧。
在前面我们讲过线程的优先级,优先级高的程序会先执行,而优先级低的程序会后执行。
如果希望人为地控制线程,使正在执行的线程暂停,将 CPU 让给别的线程,这时可以使用
静态方法 sleep(long millis),该方法可以让当前正在执行的线程暂停一段时间,进人休眠等待
状态。当前线程调用 sleep(long millis)方法后,在指定时间参数(mllis)内是不会执行的,这样其
他的线程就可以得到执行的机会了。
sleep(long mllis)方法声明抛出 lnterrptedExcepion 异常,因此在调用该方法时应该捕获异
常,或者声明抛出该异常。接下来通过一个案例来演示一下 sleep(long millis)方法在程序中
的使用.如例 5-8 所示。
例 14-8 Example08.java
public class Example08 {
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();
}
}
}
}
运行结果如图 14-12 所示
例 14-8 中开启了两个线程,在这两个线程中分别调用了 Thread 的 sleep(500)方法(代
码中的第 10 行和第 27 行),目的是让一个线程在打印一次后休眠 500ms,从而使另一个线程
获得执行的机会,这样就可以实现两个线程的交替执行。
在线程一的 for 循环中,当 i=3 时,调用了 Thread 的 sleep(2000)方法(代码中第 20 行),
使线程休眠 2s,从运行结果可以看出,主线程输出 2 后,线程一没有交替输出 3,而是主线
程技接着输出了 3 和 4,这说明了线程一进入了休眠等待状态。
在主线程的 for 循环中,当 i=5 时,也调用了 Thread 的 sleep(2000)方法(代码的第 7 行),
使线程休眠 2s。从运行结果可以看出,在主线程输出 4 后,下面连续 4 句话都是线程一输
出的。只有当主线程 2s 休眠完毕后,两个线程才会恢复交替执行。
需要注意的是,sleep( )是静态方法,只能控制当前正在运行的线程休眠,而不能控制其
他线程休眠。当休眠时间结束后,线程就会返回到就绪状态,而不是立即开始运行。