Java 线程休眠

原文:https://www.studytonight.com/java/sleeping-thread-in-java.php

为了让一个线程休眠指定的时间,Java 提供了在 thread 类中定义的休眠方法。sleep 方法是一个重载方法,如下所示。它抛出中断的异常,因此请确保提供正确的处理程序。

它总是暂停当前线程的执行。任何其他线程都可以在睡眠中中断当前线程,在这种情况下,将引发中断异常。

句法

sleep(long millis)throws InterruptedException
sleep(long millis, int nanos)throws InterruptedException

示例:睡眠线程

在这个例子中,我们使用 sleep 方法来睡眠线程。每个线程将休眠 1500 毫秒,然后继续执行。见下面的例子。

    public class MyThread extends Thread
{ 
        MyThread(String str){
            super(str);
        }

        public void run()
        {
                System.out.println(Thread.currentThread().getName()+" Started");
                try{
                    MyThread.sleep(1500); 
                    }catch(InterruptedException ie){
                        System.out.println(ie);
                }
                System.out.println(Thread.currentThread().getName()+" Finished");
        }
        public static void main(String[] args)
        {
                MyThread t1=new MyThread("first thread");
                MyThread t2=new MyThread("second thread");
                t1.start();
                t2.start();
        }
}

第一个线程已启动第二个线程已启动第一个线程已完成第二个线程已完成

例子

    public class MyThread extends Thread
{ 
        MyThread(String str){
            super(str);
        }

        public void run()
        {
                System.out.println(Thread.currentThread().getName()+" Started");
                try{
                    MyThread.sleep(1500);
                    System.out.println(Thread.currentThread().getName()+" Sleeping..");
                    }catch(InterruptedException ie){
                        System.out.println(ie);
                }
                System.out.println(Thread.currentThread().getName()+" Finished");
        }
        public static void main(String[] args)
        {
                MyThread t1=new MyThread("first thread");
                MyThread t2=new MyThread("second thread");
                System.out.println(t1.getName()+" state: "+t1.getState());
                t1.start();
                System.out.println(t1.getName()+" state: "+t1.getState());
                System.out.println(t2.getName()+" state: "+t2.getState());
                t2.start();
                System.out.println(t2.getName()+" state: "+t2.getState());
        }
}

第一线程状态:新的第一线程状态:可运行的第二线程状态:新的第一线程已启动的第二线程状态:可运行的第二线程已启动的第一线程正在睡眠..第二线程正在睡眠..第二个线程已完成第一个线程已完成

Thread.sleep()与线程调度器交互,将当前线程置于等待状态一段指定的时间。等待时间结束后,线程状态变为可运行状态,等待 CPU 进一步执行。所以当前线程休眠的实际时间取决于作为操作系统一部分的线程调度器。