Java多线程之sleep
一、Sleep(long millis)
使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行),具体取决于系统定时器和调度程序的精度和准确性。 线程不会丢失任何显示器的所有权。
1、sleep会使当前线程从Running进入到Timed Waiting状态
2、interrupt方法,可以进行打断处于Timed Waiting的线程,然后就会抛出异常
3、睡眠结束后,不一定能马上得到CPU的使用(存在上下文切换)
4、一般都使用TimeUnit来进行休眠的处理,可读性好
Thread.sleep(2000); ----> TimeUnit.SECONDS.sleep(2);
5、在while(true)中使用sleep或yield是可以防止CPU的使用达到100%的(单核的情况下,会出现100%)
二、使用interrupt打断sleep抛出异常
public class Text02 {
public static void main(String[] args) {
Thread thread = new Thread("t1") {
@Override
public void run() {
// 先打印这个,然后进行睡眠,然后主线程进行打断,抛出异常
System.out.println("t1 is sleep");
try {
Thread.sleep(2000);
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
System.out.println("t1 is interrupt ");
e.printStackTrace();
}
}
};
thread.start();
// 主线程睡眠,然后打断处于Timed Waiting的线程
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 打断
thread.interrupt();
}
}