Thread.sleep方法的作用:
使当前线程暂停执行一段时间,交出cpu的执行时间片,并且在暂停期间不会参与cpu时间片的获取。直到等待时间结束恢复到就绪状态,是否执行还要看OS的调度,或者在这段时间内被中断。
Thread.sleep方法的工作流程:
- 挂起线程并修改其运行状态。
- 用sleep提供的参数设置一个定时器。
- 当时间结束后,定时器会触发,内核收到信号后会修改线程运行状态,例如线程会被标记为就绪状态而进入就绪队列等待OS调度。
代码demo:
public class ThreadSleepDemo {
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
try {
long startTime = System.currentTimeMillis();
Thread.sleep(1000);
long endTime = System.currentTimeMillis();
System.out.println(endTime - startTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}
//因为睡眠过后线程不一定会立即执行,还需要等待OS的调度,所以执行结果不一定是1000。
执行结果:

Thread.sleep(0) 的意义:
- Thread.sleep(0) 不是完全没有意义的。
- Thread.sleep(0)完成了sleep三个工作流程的第一个,使线程挂起,出让CPU资源,只是挂起之后又立即参与到cpu时间片的竞争当中。
- 跟Thread.yield()方法相似。
本文深入解析了Java中Thread.sleep方法的功能与工作流程,包括使线程暂停执行、交出CPU执行时间片的具体机制,以及与Thread.yield方法的相似之处。通过代码示例展示了线程在暂停后恢复至就绪状态的过程,强调了执行结果受OS调度的影响。

1520

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



