7.使当前正在执行的线程进入休眠状态


 

 

使当前正在执行的线程进入休眠状态

 

 导言

有时候我们需要让当前正在执行的线程隔一段时间执行一次,每隔一秒钟打印一次当前时间,这就需要使当前正在执行的线程进入休眠状态

sleep

sleep方法的作用,就是使当前正在执行的线程进入休眠状态,它是一个静态方法,直接使用thread类名调用,只有一个参数minutes,作用是指定睡眠时间,以毫秒为单位,minutes的值不能为负数,否则会引发非法参数异常。同样的当前线程正在睡眠的时候,他突然被中断了,将会引发线程中断异常。

 

演示

下面来演示该方法。为了让睡眠效果更明显,我们在睡眠前打印一句话,接着调用sleep方法传入minutes参数,值为1000,即睡眠一秒钟,sleep方法有抛异常,这里使用try catch将其捕获,最后我们在睡眠后打印一句话,从运行结果来看,时间间隔一秒钟,但是这看起来不够明显。

package com.chenjie.executor.day07;

public class Main1 {
    public static void main(String[] args) {
        System.out.println("睡眠前");
        try {
            Thread.sleep(1000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("睡眠后");

    }
}

打印

睡眠前
睡眠后

Process finished with exit code 0

 

接下来我们将在睡眠前后分别打印当天时间,调用localDatetime.now()方法获取当前时间,这次的结果更加直观,时间间隔的确是一秒钟。 

package com.chenjie.executor.day07;

import java.time.LocalDate;
import java.time.LocalDateTime;

public class Main1 {
    public static void main(String[] args) {
        System.out.println("睡眠前"+ LocalDateTime.now());
        try {
            Thread.sleep(1000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("睡眠后"+LocalDateTime.now());

    }
}

打印

睡眠前2024-05-26T19:07:27.008
睡眠后2024-05-26T19:07:28.019

sleep还有一个重载方法,该方法除了minis以外,还有一个参数nanos,nanos用于指定睡眠时间的纳秒部分,它可以指定的范围为0-999999,如果millis或nanos的值为负数,或者nanos的值不在范围内的话,将会引发非法参数异常。同样的当前线程在睡眠过程中被中断,将会引发线程中断异常。

接下来我们来演示sleep的重载方法,传入nanos参数值为999,999。 

package com.chenjie.executor.day07;

import java.time.LocalDate;
import java.time.LocalDateTime;

public class Main1 {
    public static void main(String[] args) {
        System.out.println("睡眠前"+ LocalDateTime.now());
        try {
            Thread.sleep(1000L,999999);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("睡眠后"+LocalDateTime.now());

    }
}

 

从结果来看,和之前的差不多,时间间隔也是一秒钟。

睡眠前2024-05-26T19:09:48.767
睡眠后2024-05-26T19:09:49.769

 总结

最后我们来总结一下本节内容,介绍了thread类里面的sleep方法,它是一个静态方法,直接使用类名调用,它的作用是使当前正在执行的线程进入休眠状态。实际开发中经常会使用到它。 

posted @ 2022-04-26 22:00  小陈子博客  阅读(429)  评论(0编辑  收藏  举报