sleep() 和 wait() 有什么区别?
1、这两个方法来自不同的类分别是Thread和Object,sleep方法属于Thread类中的静态方法,wait属于Object的成员方法。
2、最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3、wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用(使用范围)。
sleep方法属于Thread类中方法,表示让一个线程进入睡眠状态,等待一定的时间之后,
自动醒来进入到可运行状态,不会马上进入运行状态,
因为线程调度机制恢复线程的运行也需要时间,一个线程对象调用了sleep方法之后,
并不会释放他所持有的所有对象锁,所以也就不会影响其他进程对象的运行。
但在sleep的过程中有可能被其他对象调用它的interrupt(), 产生InterruptedException异常,
如果你的程序不捕获这个异常,线程就会异常终止,进入TERMINATED结束状态,
如果你的程序捕获了这个异常,那么程序就会继续执行catch语句块(可能还有finally语句块)以及以后的代码。
wait属于Object的成员方法,一旦一个对象调用了wait方法,
必须要采用notify()和notifyAll()方法唤醒该线程;
如果线程拥有某个或某些对象的同步锁,那么在调用了wait()后,
这个线程就会释放它持有的所有同步资源,而不限于这个被调用了wait()方法的对象。
wait()方法也同样会在wait的过程中有可能被其他对象调用interrupt() 方法而产生InterruptedException,
效果以及处理方式同sleep()方法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix