首页 > 编程笔记 > Java笔记 阅读:7

Java sleep():设置线程休眠(附带实例)

线程的调度是按照线程的优先级的高低顺序抢占 CPU 资源的,优先级高的线程会优先抢占 CPU 资源,线程不执行完,优先级低的线程就无法抢占 CPU 资源。

Java 的 Thread 类提供了 sleep() 方法,该方法可使正在执行的线程进入阻塞状态,也叫线程休眠。休眠时间内该线程是不运行的,休眠时间结束后线程才继续运行。

如果想让优先级低的线程抢占 CPU 资源,就需要调用 sleep() 方法,该方法是人为地控制线程,让正在执行的线程暂停一段固定的时间,在暂停的时间内,线程让出 CPU 资源,让优先级低的线程有机会运行。休眠方法结束之后,线程将进入可运行状态。

sleep() 方法有两种形式,具体如下:
static void sleep(long millis)
static void sleep(long millis, int nanos)

使用 sleep(long millis) 方法时会报 InterruptedException 异常,此时必须捕获异常或抛出异常。

接下来,通过案例来演示线程休眠:
import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo {
    public static void main(String[] args) throws InterruptedException {
        // 创建MyThread实例
        System.out.println("吃饭时吃菜的顺序:");
        MyThread myThread1 = new MyThread("水煮肉片");
        MyThread myThread2 = new MyThread("酱焖茼蒿");
        MyThread myThread3 = new MyThread("树根炒树皮");
        myThread1.setPriority(Thread.MIN_PRIORITY); // 设置优先级
        myThread2.setPriority(Thread.MAX_PRIORITY);
        myThread3.setPriority(Thread.NORM_PRIORITY);
        myThread3.start(); // 开启线程
        Thread.sleep(2000); // 设置线程休眠
        myThread2.start();
        Thread.sleep(2000);
        myThread1.start();
    }
}

class MyThread extends Thread {
    private final String Cuisine;

    public MyThread(String Cuisine) {
        this.Cuisine = Cuisine;
    }

    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Cuisine + i);
        }
    }
}
程序的运行结果如下:

吃饭时吃菜的顺序
树根炒树皮0
树根炒树皮1
树根炒树皮2
树根炒树皮3
树根炒树皮4
酱焖茼蒿0
酱焖茼蒿1
酱焖茼蒿2
酱焖茼蒿3
酱焖茼蒿4
水煮肉片0
水煮肉片1
水煮肉片2
水煮肉片3
水煮肉片4

程序中,线程启动后调用 Thread 类的 sleep() 方法,让程序休眠 2 秒。

相关文章