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) 是可以让其他高优先级的线程有机会执行,而不是本线程一直持有。

相关推荐
后端AI实验室几秒前
我带的那个实习生,比我更依赖AI——但他的问题和我完全不同
java·ai
y小花2 分钟前
安卓StorageManagerService
android·java
码王吴彦祖2 分钟前
AI 逆向分析国航 AirChina FECU 参数来源并实现离线生成
android·java·javascript
LJianK13 分钟前
进程、线程、多线程、异步
java·开发语言·jvm
ch.ju6 分钟前
Java程序设计(第3版)第二章——循环结构1
java
大黄烽6 分钟前
IDEA中集成AI 工具CodeBuddy和Trae区别和选型
java·人工智能·intellij-idea
HalvmånEver10 分钟前
MySQL表的约束(二)
java·数据库·mysql
云烟成雨TD15 分钟前
Spring AI Alibaba 1.x 系列【34】Human-in-the-Loop(人在回路)执行流程
java·人工智能·spring
M ? A16 分钟前
Vue转React终极指南:VuReact全特性语义对照
前端·javascript·vue.js·react.js·面试·开源·vureact
Mr -老鬼19 分钟前
Salvo Web框架专属AI智能体 - 让Rust开发效率翻倍
人工智能·后端·rust·智能体·salvo