Java多线程Thread类sleep()方法解释

        sleep()是一个静态方法,表示让当前线程在指定的毫秒时间内睡眠。在指定的时间内,当前线程是阻塞状态。

       正因为是一个静态方法,所以可以既直接通过类去调用(比如:Thread.sleep(1000)),也可以使用创建的线程的实例化对象去调用。个人感觉因为是静态方法,所以直接用类去调用比较好。但是到底是用Thread的子类去调用还是Thread本身,很多人都会有疑虑。其实无论是使用Thread.sleep(1000)还是MyThread.sleep(1000)去调用,对于线程来说都是一个效果。因为sleep方法考虑的是当前线程,也就是方法代码是在那个线程中执行的。而无关乎到底是那个线程的类调用的该方法。

package exer;

/**
 * @author ShuaiBiXiaoEr
 * @create 2021-05-17 15:46
 */
public class SleepMethodTest {
    public static void main(String[] args) {
        SleepMethod s1 = new SleepMethod();
        s1.start();
        try {
            System.out.println("这里是休息之前");
            SleepMethod.sleep(20000);
            System.out.println("这里是休息之后");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

class SleepMethod extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName()+":" + i);
        }
    }
}

正如上述代码,我们在主线程(主函数执行的线程)中,用自己新建的线程SleepMethod去调用sleep方法,最后的运行结果是主线程休息了2000ms之后继续执行。执行结果如下图所示。

这里是休息之前
Thread-0:0
Thread-0:1
Thread-0:2
Thread-0:3
Thread-0:4
这里是休息之后

所以最终的出来的结论就是,无论是用哪个线程类去调用sleep方法,休息的都是当前线程,也就是运行sleep代码执行所在的线程。和sleep的调用者无关,并且Thread.sleep()一般写在Run()方法当中。以上观点是个人的理解。

java小白自己学习期间的感悟。有问题欢迎讨论和指导。

你可能感兴趣的:(java,多线程)