java中的sleep()和wait()的区别
1. sleep()方法:是属于Thread类中的。
wait()方法:是属于Object类中的;两者都会造成线程的阻塞(让出cpu使用权)
2. sleep()方法是在指定的时间让当前线程暂停执行,让出cpu该其他线程,但是他的状态依然保持(就是执行到了哪行代码就在哪行停留着,等到超时或者调用interrupt()来终止),当指定的时间到了又会自动恢复运行状态,从阻塞状态变为就绪状态
wait()是无限制等待,即当前线程永久暂停,直到其他线程调用 该对象notify()或 notifyAll()才能解除这种状态,不过由于它是在同步上下文中的,所以还要拿到同步锁才能从阻塞状态变为就绪状态,运行状态时还是从原有wait()下一行开始执行(为wait感到悲哀)
3. sleep()不会释放对象锁(也意味在同步方法或同步块使用sleep方法,其他线程无法执行同步上下文的内容)
wait()方法会放弃对象锁
4. sleep()可以在任意地方使用
wait()只能在同步上下文中使用(同步块或同步方法)
PS:wait(),notify(),notifyAll()这三兄弟只能在同步上下文中使用。
5. sleep是静态方法,作用于当前的执行的线程
wait是实例方法,作用于当前的执行的线程(这一点很多人都说作用当前对象,我认为是错的,正确应该是当前的执行的线程会进入到等待持当中)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~