Java 面试宝典:你知道 Thread.sleep(0) 的作用是什么吗?

大家好,我是大明哥,一个专注「死磕 Java」系列创作的硬核程序员。 本文已收录到我的技术网站:www.skjava.com。有全网最优质的系列文章、Java 全栈技术文档以及大厂完整面经


回答

让当前线程主动让出 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 竞争。

在 Java 中,线程的调度是抢占式的,这意味着持有 CPU 的线程只有主动放弃 CPU,其他线程才会有机会竞争到 CPU。同时,Java 中的线程是具有优先级的,高优先级的线程在竞争CPU时更有可能被优先选择。所以,我们调用 sleep(0) 是可以让其他高优先级的线程有机会执行,而不是本线程一直持有。

相关推荐
Chengbei11几秒前
2026护网HVV面试看这篇就够了!真题+技巧+培训福利一站式get
网络·安全·web安全·网络安全·面试·职场和发展·安全架构
Huangxy__11 分钟前
java相机手搓(后续是文件保存以及接入大模型)
java·开发语言·数码相机
xiaoxue..29 分钟前
react:浅聊 vdom 与 diff 算法
前端·javascript·react.js·面试
Honmaple30 分钟前
2026 年做短视频,这 5 个 AI 技能插件我把每个都跑通了
后端
j_xxx404_35 分钟前
用系统调用从零封装一个C语言标准I/O库 | 附源码
linux·c语言·开发语言·后端
覆东流37 分钟前
第4天:Python输入与输出
后端·python·photoshop·输入与输出
计算机魔术师40 分钟前
【AI面试八股文 Vol.1.1 | 专题3:State Schema 设计】State Schema设计:TypedDict / Pydantic类型约束
linux·人工智能·面试
摇滚侠41 分钟前
Java Map 类型的数据可以存储到 Redis Hash 类型中
java·redis·哈希算法
1368木林森1 小时前
字节 / 美团二面高频题:订单 30 分钟未支付自动取消?3 种进阶方案拆解 + 面试满分回答
面试·职场和发展
人道领域1 小时前
【LeetCode刷题日记】:151翻转字符串的单词(两种解法)
java·开发语言·算法·leetcode·面试