一、sleep方法
关于线程的休眠方法这件事,我们最最熟悉的肯定是之前就一直在用的sleep方法,那么我今天想告诉大家的是其实sleep方法不一定就会执行相应的休眠时间,关于sleep以及interrupt方法的溯源,我们用一段代码来看。
代码如下:
package thread.threaddemo;
/**
* @Author: wenjingyuan
* @Date: 2022/11/11/21:31
* @Description:
*/
public class ThreadSleep {
public static void main(String[] args) throws InterruptedException {
Thread thread=new Thread(()->{
try {
Thread.sleep(1000*60*60);
} catch (InterruptedException e) {
//e.printStackTrace();
System.out.println("我接收到了一个终止异常");
}
});
thread.start();
Thread.sleep(1000);
System.out.println("终止子线程 thread");
thread.interrupt();
}
}
结果如下:
结论:
虽然我调用了sleep方法想要我的程序能够执行休眠1小时,但最终因为我的线程被意外的中断,interrupt最终是将我正在执行的休眠打断,最终打印了我catch里边的内容。
sleep问题:
在我们每次使用sleep的时候,比如想让我们的程序休眠一天,那我们总是需要在基准的单位1000ms开始计算,这样对于我们来说是非常麻烦的一件事情。同时也存在算错的风险。
二、TimeUnit方法
代码如下:
package thread.threaddemo;
import java.time.LocalDateTime;
import java.util.concurrent.TimeUnit;
/**
* @Author: wenjingyuan
* @Date: 2022/11/12/10:03
* @Description:TimeUnit方法
*/
public class ThreadTimeUnit {
public static void main(String[] args) throws InterruptedException {
System.out.println("主线程开始执行了:"+ LocalDateTime.now());
TimeUnit.DAYS.sleep(1);
Thread.sleep(1000*60*60*24);
}
}
结论:
在以上代码中我们可以很方便的看到,TimeUnit在休眠的时候可以非常的方便。如果想要休眠的时间成为一天、一小时。一分钟等等,只要将中间的DAYS换成对应的就可。
三、总结
关于线程的其他休眠方法,我在后续的博客中也会继续写到。期待一下pa!