最近在学习多线程这一块,发现里面有好多让人产生误区的地方,今天我来分析下java多线程中的yield功能,希望其他朋友也可以从中学习到相关知识。
开始之前先看下面一幅图:
这幅图表示线程的运行状态:新建---》就绪《--阻塞--》运行----》死亡
yield从字面上看是礼让的意思,顾名思义就是让其他线程有执行的机会。这里有个很大的误区,以为执行yield方法就能暂停当前线程让其他线程执行,这是错误的。
yield方法只是让当前执行的线程从“运行”状态转变为“就绪”状态,等待执行。此时谁抢占CPU资源谁就会执行,故当前方法也有可能继续执行,并不一定是停止
自己,让其他线程执行。
看网上其他文章说yield方法对于同一优先级的线程有效,我经过实验发现并不是这样,如果大家有不同意见欢迎讨论!
时间: 2024-10-15 05:45:28