回答
让当前线程主动让出 CPU,触发操作系统立刻重新进行一次CPU竞争,使其他具有相同或更高优先级的线程有机会运行。
分析
我们都知道 Thread.sleep(n)
表示让线程暂停 n
久,同时让出 CPU,等 n
事件过后,线程被唤醒,进入就绪状态参与 CPU 竞争。
但是,这个 sleep(0)
是什么意思?休眠 0 ?有什么意义?
在操作系统中,CPU 的竞争策略有多种,作为 Java 程序员我们以 Linux 为例。
Linux 操作系统采用时间片循环调度算法,它的目的是为了提供公平的 CPU时间分配,确保每个运行的进程或线程都有相等的机会获得CPU时间片。在该调度算法下,CPU的使用时间被划分成一个个固定长度的时间片,然后按照时间片的顺序分配给各个任务。当一个任务的时间片用完后,它会被移到就绪队列的末尾,让其他等待执行的任务有机会获得CPU时间。如果进程在时间片内阻塞或结束,则CPU立即切换。
当我们调用 sleep()
时,它其实就是在告诉 CPU:我主动放弃 CPU 时间片,让其他线程有机会执行。同时线程进入等待状态(阻塞)。0
表示我不等待,需要立刻被唤醒,进入就绪状态,参与 CPU 竞争。
所以,sleep(0)
表示:线程主动放弃 CPU,状态从运行状态切换为就绪状态,与其他线程参与 CPU 竞争。