线程休眠:Thread类的静态方法sleep
- 暂时让出指定时间的CPU执行权,这段时间不参与CPU调度。睡眠时间到后,线程处于就绪状态,参与CPU的调度,获取CPU资源后就可以运行了。
- 该线程还是拥有监视器资源,即持有的锁还不让出
- 在睡眠期间,可以调用该线程的interrupt方法中断该线程
Thread t = new Thread(()->{
try {
TimeUnit.SECONDS.sleep(10);
System.out.println("t1 end");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
t.start();
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
t.interrupt();
结果分析:t线程运行2秒后,被中断了,不再睡眠,直接返回
让出CPU执行权:Thread类的静态方法yield
- 将当前线程让出自己的CPU剩余时间的使用权,让线程调度器进行下一轮调度
sleep和yield的区别
- sleep会阻塞一段时间,这段时间线程调度器不会去调度该线程,睡眠时间到后,处于就绪状态,才参与CPU的调度
- yield让出CPU剩余时间的使用权,处于就绪状态,线程调度器下次调度时有可能还会调度当前线程执行