sleep:
在Thread 类中定义的静态方法,可以阻塞当前线程
特征:不释放已经获取到的锁
sleep原函数--
public static native void sleep(long millis) throws InterruptedException
public static void sleep(long millis, int nanos)throws InterruptedException
sleep(long):让当前线程休眠等待指定的时间,时间单位为ms。休眠时间的准确性依赖于操作系统时钟和CPU 调度机制
目前比较流行的写法为TimeUnit.SECONDS.sleep(1) 等价于Thread.sleep(1000)
注意:如果需要可以通过interrupt 方法来唤醒休眠的线程
案例:
实现一个时间显示,每隔一秒钟更新一次显示。例如倒计时显示
题目分析:DateFormat 用于实现日期时间的格式化date--string 或者解析string--date
如果需要使用自定义格式,一般使用SimpleDateFormat
public class Test01 {
public static void main(String[] args) {
DateFormat df=new SimpleDateFormat("yyyy-MM-dd E HH:mm:ss");
for(;;) {//相当于while(true)
Date now=new Date();
String ss=df.format(now);
System.out.println(ss);
//Thread.sleep(1000)--休眠1000毫秒
try {
TimeUnit.SECONDS.sleep(1);//--等价于Thread.sleep(1000)
} catch (Exception e) {
e.printStackTrace();
}
}
运行结果:

如何提前唤醒休眠的线程:
当线程进入休眠态时,它会定时结束休眠(注意时间不是很靠谱,因为休眠时间需要依靠系统时间和调度器),如果需要提前唤醒,则需要通过interrupt 方法实现,所谓的interrupt 就是产生一个异常InterruptedException
public class Test02 {
public static void main(String[] args) throws InterruptedException {
DateFormat df=new SimpleDateFormat("yyyy-MM-dd E HH:mm:ss");
Thread t1=new Thread(()-> {
for(;;) {//相当于while(true)
Date now=new Date();
String ss=df.format(now);
System.out.println(ss);
try {
//Thread.sleep(1000)--休眠1000毫秒
TimeUnit.SECONDS.sleep(10);//--等价于Thread.sleep(1000)
} catch (Exception e) {
e.printStackTrace();
}
}
});
t1.start();
Thread.sleep(200);
t1.interrupt();
System.out.println("main.....end");
}
}
重点:不会释放已经获取到的锁
本文探讨了Java中的Thread.sleep方法,该方法用于阻塞当前线程并释放锁。介绍了sleep(long)方法的用法,推荐使用TimeUnit.SECONDS.sleep(1)的写法。还提供了一个每隔一秒更新显示的倒计时案例。当线程休眠时,可通过interrupt方法提前唤醒,但不会释放已获取的锁。
1524

被折叠的 条评论
为什么被折叠?



