当前位置: 首页 > article >正文

挂起、阻塞、锁和cpu占用

Thread.sleep()和Object.wait()在 Java 多线程编程中Thread.sleep()和Object.wait()都能让线程暂停执行但它们的目的机制和使用场景有本质区别。‌核心区别总结‌‌所属类不同‌sleep()是 ‌Thread类的静态方法‌作用于当前线程。wait()是 ‌Object类的实例方法‌作用于某个对象的监视器锁。‌是否释放锁‌最核心区别sleep()‌不会释放任何锁‌线程仍持有同步块或方法中的锁。wait()‌会立即释放当前对象的锁‌允许其他线程获取该锁并执行同步代码。‌调用前提‌sleep()可在‌任意位置调用‌无需同步上下文。wait()‌必须在synchronized代码块或方法中调用‌否则抛出IllegalMonitorStateException。‌唤醒方式‌sleep()在指定时间结束后‌自动恢复‌也可被interrupt()中断。wait()需要其他线程调用同一对象的notify()或notifyAll()才能唤醒也可带超时参数如wait(1000)或被中断唤醒。‌线程状态‌sleep()使线程进入 ‌TIMED_WAITING‌ 状态是一种挂起函数‌它使线程暂时挂起进入TIMED_WAITING状态。wait()无参使线程进入 ‌WAITING‌ 状态带超时的wait(long)进入 ‌TIMED_WAITING‌。‌典型使用场景‌sleep()用于‌延迟执行‌、控制轮询间隔、模拟耗时操作等‌单线程节奏控制适用于需要‌定时暂停‌的场景如限速、模拟延迟等‌。wait()用于‌线程间协作与通信‌如生产者-消费者模型等待某条件满足后再继续。‌使用建议‌若只需‌让线程暂停一段时间‌用Thread.sleep()。若需‌等待某个条件成立并与其他线程协作‌用wait()notify()/notifyAll()并配合while循环检查条件以避免虚假唤醒。‌切勿在非同步上下文中调用wait()‌否则运行时异常。‌避免用线程对象调用sleep()‌如t.sleep()应使用Thread.sleep()因它是静态方法语义上属于“当前线程休眠”。‌Thread.sleep()方法会阻塞线程但不会占用 CPU 资源‌核心结论‌不占用 CPU‌调用Thread.sleep()后当前线程会进入‌阻塞BLOCKED/TIMED_WAITING状态‌JVM 会将其从调度队列中移除‌不再分配 CPU 时间片‌因此‌不会消耗 CPU 资源‌‌。‌释放 CPU 控制权‌线程主动让出 CPU操作系统可将 CPU 分配给其他就绪线程有助于降低整体 CPU 负载‌。补充说明‌仍持有锁‌虽然释放了 CPU但 ‌Thread.sleep()不会释放已获取的同步锁如synchronized或ReentrantLock‌这与Object.wait()有本质区别‌。‌线程池中的影响‌在使用线程池时调用sleep()的线程‌仍占用线程池中的一个线程槽位‌无法执行其他任务可能降低线程池吞吐量‌。‌上下文切换开销‌线程从阻塞恢复为就绪状态时操作系统需进行上下文切换此过程有轻微开销但‌不属于Thread.sleep()直接导致的 CPU 占用‌‌。常见误区❌ “sleep()占用 CPU” —— 实际是‌未使用 sleep 的忙等待busy-wait才导致高 CPU 占用‌‌。✅ 正确做法在循环中加入Thread.sleep()可显著降低 CPU 使用率例如从 100% 降至 3% 左右‌。综上‌Thread.sleep()是一种高效、低开销的线程暂停机制适用于需要延时或降低 CPU 负载的场景‌。Kotlin 协程的挂起不会阻塞线程‌这是协程区别于传统线程阻塞机制的核心优势之一。关键要点‌挂起suspend‌ 是协程内部的状态暂停仅暂停当前协程的执行‌不会阻塞底层线程‌线程可继续执行其他任务。‌阻塞blocking‌ 是指线程被占用无法执行其他工作直到操作完成如Thread.sleep()或同步 I/O。协程通过 ‌Continuation 机制‌ 和 ‌状态机‌ 实现挂起与恢复在挂起点保存上下文后释放线程待异步操作完成后再调度恢复执行。实际影响在 Android 开发中使用suspend函数如withContext(Dispatchers.IO)执行网络请求或数据库操作时‌主线程不会被阻塞‌UI 保持响应。若在主线程直接调用阻塞式 API如同步 HTTP 请求‌即使在外层启动了协程仍会导致 ANR‌因此必须配合withContext(Dispatchers.IO)等调度器使用。总结✅ ‌挂起 非阻塞‌协程挂起时线程被让出可处理其他协程。❌ ‌阻塞 线程占用‌应避免在主线程或协程中使用阻塞式调用如Thread.sleep()、同步 I/O。 最佳实践所有可能耗时的操作网络、文件、数据库应在suspend函数内使用withContext(Dispatchers.IO)包装确保主线程安全。

相关文章:

挂起、阻塞、锁和cpu占用

Thread.sleep() 和 Object.wait() 在 Java 多线程编程中,Thread.sleep() 和 Object.wait() 都能让线程暂停执行,但它们的目的机制和使用场景有本质区别。‌核心区别总结‌‌所属类不同‌sleep() 是 ‌Thread 类的静态方法‌,作用于当前线程。…...

【算法日记】Day 11 动态规划专题——区间DP之基于范围中划分点的讨论

Abstract:#动态规划 #区间DP #多边形剖分 1. 题目 题目:LeetCode 1039. 多边形三角剖分的最低得分核心思路:定义dp[i][j]表示从顶点i到顶点j构成的多边形(凸多边形,顶点按顺序排列)通过三角剖分能得到的最…...

TensorBoard日志可视化翻车实录:从端口占用、缓存问题到库版本冲突的完整排错指南

TensorBoard故障排查实战手册:从端口冲突到版本兼容的深度解决方案 TensorBoard作为深度学习实验可视化的核心工具,其使用过程中遇到的各类"玄学问题"往往让开发者束手无策。本文将系统梳理那些官方文档未曾详述的典型故障场景,提供…...

YOLO-v8.3保姆级教程:手把手教你搭建工业质检系统

YOLO-v8.3保姆级教程:手把手教你搭建工业质检系统 1. 引言 在工业生产线上,产品质量检测一直是至关重要的环节。传统的人工质检方式不仅效率低下,而且容易受到主观因素影响,导致漏检和误检。随着计算机视觉技术的发展&#xff0…...

别再死记Twist公式了!用‘拧螺丝’的直觉理解机器人运动学(附Python可视化代码)

从拧螺丝到机器人运动学:用生活直觉破解Twist公式的奥秘 刚接触机器人学的同学,一定对Twist(速度旋量)这个概念又爱又恨——它既能精确描述刚体运动,又抽象得让人摸不着头脑。传统教材一上来就抛出ω和v的数学定义&…...

OpenClaw内存优化技巧:Phi-3-vision-128k-instruct在8GB设备上的稳定运行方案

OpenClaw内存优化技巧:Phi-3-vision-128k-instruct在8GB设备上的稳定运行方案 1. 为什么需要内存优化? 去年我在一台老款MacBook Air上第一次尝试部署Phi-3-vision-128k-instruct时,系统几乎立即崩溃。这台仅有8GB内存的设备,在…...

构建具备批判性思维的AI Agent

构建具备批判性思维的AI Agent:从理论到生产级RAG反思循环系统 副标题:拆解GPT-4o、Claude Opus的「逻辑过滤」核心,用LangChain AutoGen Python落地高准确率Agent第一部分:引言与基础 1. 引人注目的标题 (本文已单独…...

三大技术突破:重新定义Android设备标识的完整解决方案

三大技术突破:重新定义Android设备标识的完整解决方案 【免费下载链接】Android_CN_OAID 安卓设备唯一标识解决方案,可替代移动安全联盟(MSA)统一 SDK 闭源方案。包括国内手机厂商的开放匿名标识(OAID)、海…...

2026届毕业生推荐的六大AI写作方案推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 使AIGC检测概率降低的关键之处在于把机器生成时所具有的规律性痕迹予以减少。给出的建议是从…...

如何用CuteTranslation解决Linux屏幕翻译难题:完整技术指南

如何用CuteTranslation解决Linux屏幕翻译难题:完整技术指南 【免费下载链接】CuteTranslation Linux屏幕取词翻译软件 项目地址: https://gitcode.com/gh_mirrors/cu/CuteTranslation CuteTranslation是专为Linux X11环境设计的智能屏幕取词翻译软件&#xf…...

AMPL社区版下载安装全攻略:从注册到运行第一个优化模型(附迅雷加速技巧)

AMPL社区版实战指南:从零开始构建优化模型 第一次接触AMPL时,很多人会被它强大的数学优化能力吸引,却又在安装配置阶段遇到各种"拦路虎"。作为一款专业的数学建模语言,AMPL确实需要一些技巧才能顺利上手。本文将带你避开…...

AI Agent Harness Engineering 开发必备技能栈:编程语言、框架与工具全梳理

AI Agent Harness Engineering 开发必备技能栈:编程语言、框架与工具全梳理 一、引言 (Introduction) 钩子 (The Hook) 你是否见过凌晨三点的硅谷车库咖啡馆?哦,现在的硅谷极客早就不再只盯着屏幕上单调的GAN生成图或微调Transformer的loss曲线了——最近,一杯Espresso旁…...

React Easy State 与 MobX、Redux 对比:哪个更适合你的项目?

React Easy State 与 MobX、Redux 对比:哪个更适合你的项目? 【免费下载链接】react-easy-state Simple React state management. Made with ❤️ and ES6 Proxies. 项目地址: https://gitcode.com/gh_mirrors/re/react-easy-state React 状态管理…...

线性规划实战指南:从基础理论到优化应用

1. 线性规划基础:从菜市场砍价到数学建模 第一次听说线性规划时,我正蹲在菜市场跟大妈讨价还价。大妈说:"西红柿3块一斤,买5斤送半斤",我脑子里瞬间闪过一道光——这不就是典型的线性约束条件吗?…...

Compose Specification快速入门:5个步骤部署你的第一个应用

Compose Specification快速入门:5个步骤部署你的第一个应用 【免费下载链接】compose-spec The Compose specification 项目地址: https://gitcode.com/gh_mirrors/co/compose-spec Compose Specification是一个强大的工具,它允许开发者使用YAML文…...

StableSR故障排除大全:常见问题与解决方案汇总

StableSR故障排除大全:常见问题与解决方案汇总 【免费下载链接】StableSR Exploiting Diffusion Prior for Real-World Image Super-Resolution 项目地址: https://gitcode.com/gh_mirrors/st/StableSR StableSR是一款基于扩散先验的图像超分辨率工具&#x…...

从代码工厂到智能协作者:AI原生研发组织变革的5阶跃迁模型(附SITS2026评估矩阵V2.1)

第一章:从代码工厂到智能协作者:AI原生研发组织变革的5阶跃迁模型(附SITS2026评估矩阵V2.1) 2026奇点智能技术大会(https://ml-summit.org) 传统研发组织正经历一场静默却深刻的范式迁移:代码不再由人单向输出&#…...

DLSSTweaks深度解析:如何通过DLL注入技术解锁NVIDIA DLSS隐藏潜力

DLSSTweaks深度解析:如何通过DLL注入技术解锁NVIDIA DLSS隐藏潜力 【免费下载链接】DLSSTweaks Tweak DLL for NVIDIA DLSS, force DLAA on DLSS-supported titles, tweak scaling ratios & DLSS 3.1 presets, override DLSS versions without overwriting game…...

计算机毕业设计:Python天气大数据爬虫可视化系统 Django框架 线性回归 数据分析 大数据 机器学习 大模型 气象数据(建议收藏)✅

1、项目介绍 技术栈 采用 Python 语言开发,基于 Django 框架搭建 Web 应用程序,使用 MySQL 数据库进行数据存储,前端结合 Bootstrap 框架、CSS、JavaScript 和 HTML 构建界面,运用机器学习中的线性回归算法构建天气预测模型&#…...

OpenCV实战:5分钟搞定视频防抖,让你的Vlog秒变专业级

OpenCV实战:5分钟搞定视频防抖,让你的Vlog秒变专业级 每次用手机拍摄Vlog时,最头疼的就是画面抖动问题。明明构思了完美的镜头,却因为手部微颤导致成片充满业余感。专业级稳定器动辄上千元,而今天我要分享的OpenCV数字…...

深入rust-cross:理解Rust跨编译的术语与架构原理完整指南

深入rust-cross:理解Rust跨编译的术语与架构原理完整指南 【免费下载链接】rust-cross Everything you need to know about cross compiling Rust programs! 项目地址: https://gitcode.com/gh_mirrors/ru/rust-cross Rust跨编译是开发者在不同架构和操作系统…...

STM32光敏传感器实战:从环境检测到智能路灯(附完整代码)

STM32光敏传感器实战:从环境检测到智能路灯(附完整代码) 在物联网和智能硬件快速发展的今天,环境感知技术已成为各类智能设备的基础能力。其中,光线检测作为最常见的环境感知需求之一,广泛应用于智能家居、…...

SQL批量删除旧日志数据_根据创建时间戳进行清理方案

<p>应使用 WHERE created_at > DATE_SUB(NOW(), INTERVAL 1 DAY) 而非 WHERE NOW() - created_at < 86400&#xff0c;以确保索引有效利用。</p>WHERE 条件里用 created_at 而不是 now() 直接减时间直接写 WHERE created_at 看似简洁&#xff0c;但多数 MyS…...

组织熵增 vs AI原生熵减:用香农-组织信息论量化研发效能衰减(SITS2026首次发布行业基准值)

第一章&#xff1a;组织熵增 vs AI原生熵减&#xff1a;用香农-组织信息论量化研发效能衰减&#xff08;SITS2026首次发布行业基准值&#xff09; 2026奇点智能技术大会(https://ml-summit.org) 传统软件研发组织正面临不可逆的“组织熵增”——需求模糊度上升、接口契约漂移…...

ngx-toastr 国际化实现:多语言Toast通知的完整解决方案

ngx-toastr 国际化实现&#xff1a;多语言Toast通知的完整解决方案 【免费下载链接】ngx-toastr &#x1f35e; Angular Toastr 项目地址: https://gitcode.com/gh_mirrors/ng/ngx-toastr ngx-toastr 是一款功能强大的 Angular Toast 通知组件&#xff0c;它允许开发者在…...

fpga系列 HDL:跨时钟域同步 双触发器同步器

目录双触发器同步器&#xff08;Two-Flip-Flop Synchronizer&#xff09;示例代码&#xff1a;双触发器同步器的优缺点优点&#xff1a;缺点&#xff1a;适用场景&#xff1a;应用实例&#xff1a;同步来自spi_slave的单个使能信号跨时钟域的设计需要特别小心&#xff0c;以避免…...

别再手动打字了!用uniapp+科大讯飞SDK实现语音实时转文字(附完整代码)

零基础实现uniapp语音输入&#xff1a;科大讯飞流式转文字全攻略 移动应用开发中&#xff0c;语音输入功能正成为提升用户体验的关键要素。想象一下&#xff0c;用户只需按住按钮说话&#xff0c;文字就能实时出现在屏幕上——这种交互方式不仅自然高效&#xff0c;还能显著降…...

MiniCPM-V 4.5本地部署指南:从环境配置到图片视频推理全流程(附常见错误排查)

MiniCPM-V 4.5本地部署实战&#xff1a;从零搭建到多模态推理全攻略 在人工智能技术日新月异的今天&#xff0c;能够处理图片、视频等多模态数据的模型正变得越来越重要。MiniCPM-V 4.5作为一款轻量级但功能强大的多模态大语言模型&#xff0c;凭借其仅80亿参数却能达到超越GPT…...

告别华而不实:H3C TX1801 Plus刷OpenWRT后,IPv6和插件功能实测

H3C TX1801 Plus刷OpenWRT实战&#xff1a;解锁IPv6与插件生态的进阶玩法 当你手握一台H3C TX1801 Plus路由器&#xff0c;原厂固件那些看似丰富的功能选项是否总让你感觉"差点意思"&#xff1f;特别是当需要深度定制网络环境、实现完整IPv6支持或部署去广告插件时&a…...

ShutUp10++ vs 其他隐私工具:实测对比哪款更适合你的Windows系统优化需求

ShutUp10 vs 其他隐私工具&#xff1a;实测对比哪款更适合你的Windows系统优化需求 在数字时代&#xff0c;隐私保护已成为每个Windows用户不可忽视的重要议题。面对系统内置的各种数据收集功能&#xff0c;第三方隐私工具应运而生&#xff0c;它们承诺能帮助我们重新掌控自己的…...