Thread.yield()之后,线程的Thread.State是什么?

6
< p >在< code >Thread.yield()之后,线程的Thread.State是什么?它是Thread.State.WAITING吗?谢谢。< /p >
1个回答

6
不,线程仍然处于RUNNABLE状态。注意,RUNNABLE表示线程可用于运行,可能正在运行或等待轮到它运行。Thread.STATE不区分当前执行的线程和准备运行的线程,它们都是RUNNABLE
只有在调用wait()join()LockSupport.park()时,线程才会进入WAITING状态。
通过调用 Thread.yield() 方法,当前正在运行的线程自愿放弃其 CPU 时间片。然后该线程从运行状态转换回就绪状态。

@krock:所以它是可运行的,但它给线程调度程序一个机会来激活不同的线程? - Max
可运行,而非正在运行。只有在调度器分配时间片时,它才能运行。相比之下,调用join()的线程此时无法运行(即不可运行)。 - EricSchaefer
1
查看这个类似的问题。我认为这真的不可能(除非大量折腾),在单个CPU系统中,你的代码正在执行的线程是唯一的。 - krock
1
你想知道线程是否正在执行吗?我认为你无法从JVM内部弄清楚这一点。你还必须定义“现在”实际上是什么意思。 - EricSchaefer
1
@Nizam 我不知道。我在这个帖子上的评论已经有8年了,自那以后我也没有做过很多Java。你的问题似乎也是一个普遍性的问题,与这个帖子没有真正的关系。把它变成一个真正的SO问题,很多人就能回答它了。 - EricSchaefer
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接