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方法,它是一个静态方法,直接使用类名调用,它的作用是使当前正在执行的线程进入休眠状态。实际开发中经常会使用到它。
本文来自博客园,作者:小陈子博客,转载请注明原文链接:https://www.cnblogs.com/cj8357475/p/16085976.html