【线程基础】【五】yield、sleep、wait方法的异同
1 前言
本节我们讲下Thread.yield()
方法的作用,并对比下sleep()
方法、wait()
方法,看看三者有何区别。
2 yield 方法
作用是:提出释放CPU时间片的请求,不会释放锁,主要知道它不会阻塞线程即可哈,平时我是没怎么用过哈。
特点就是:
(1)yield()方法只是提出申请释放CPU资源,至于能否成功释放由JVM决定。
(2)调用了yield()方法后,线程依然处于RUNNABLE状态,线程不会进入堵塞状态。
(3)调用了yield()方法后,线程处于RUNNABLE状态时,线程就保留了随时被调度的权利。
3 yield 方法与 sleep 方法的区别
yield()
方法调用后线程处于RUNNABLE
状态,而sleep()
方法调用后线程处于TIME_WAITING
状态,所以yield()
方法调用后线程只是暂时的将调度权让给别人,但立刻可以回到竞争线程锁的状态;而sleep()
方法调用后线程处于阻塞状态。
4 sleep 方法与 wait 方法的区别
sleep()
方法的特点就是:(1)使线程进入WAITING状态(2)不会占用CPU资源(3)不释放锁(4)响应中断
那么跟 wait 方法的异同点:
相同点:(1)都可以使阻塞线程(2)都可以响应中断,抛出中断异常并清理中断标志
不同点:
(1)wait()
、notify()
方法必须写在同步方法中,是为了防止死锁和永久等待,使线程更安全,而sleep()
方法不需要有这个限制。
(2)wait()
方法调用后会释放锁sleep()
方法调用后不会释放锁。
(3)sleep()
方法必须要指定时间参数;wait()
方法可以不指定时间参数。
(4)两个方法所属类不同,sleep()
方法属于Thread类;wait()
属于Object类中,放在Object类中是因为Java中每个类都可以是一把锁。
5 小结
本节简单介绍了下yield方法,以及和sleep、wait方法的区别,主要是理解状态的转变以及锁的释放哈,有理解不对的地方欢迎指正哈。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了