【问题标题】:What is the Thread.State of a thread after Thread.yield()?Thread.yield() 之后线程的 Thread.State 是什么?
【发布时间】:2010-07-18 10:51:52
【问题描述】:

Thread.yield() 之后的线程的Thread.State 是什么?是Thread.State.WAITING 吗?谢谢。

【问题讨论】:

    标签: java concurrency


    【解决方案1】:

    不,线程仍将处于RUNNABLE 状态。请注意,RUNNABLE 表示线程可以运行,并且可能当前正在运行或等待轮到它。 Thread.STATE 不区分当前正在执行的线程和准备运行的线程,它们都是RUNNABLE

    只有在调用wait()join()LockSupport.park() 时,线程才会进入WAITING 状态。

    通过调用Thread.yield() 方法,当前正在运行的线程自愿放弃其CPU 时间片。然后该线程从运行回到就绪状态。

    【讨论】:

    • @krock: 所以它是可运行的,尽管它让线程调度程序有机会激活不同的线程?
    • @Max,是的 yield() 是向系统发出的通知,它应该让其他线程有机会运行。如果没有其他事情可做,线程可以简单地继续执行。
    • 查看this similar question。我认为这是不可能的(没有大量的混乱),在单个 CPU 系统中,您当时运行的代码在一个且唯一的执行线程中。
    • 您想知道线程现在是否正在执行?我认为您无法从 jvm 内部解决此问题。您还必须定义“现在”的实际含义。
    • @Nizam 我不知道。我对这个线程的评论大约有 8 年的历史,从那时起我就没有做很多 Java 了。您的问题似乎也很笼统,与该线程无关。把它变成一个真正的 SO 问题,很多人都能回答。
    猜你喜欢
    • 2021-11-29
    • 2012-04-03
    • 2015-07-01
    • 1970-01-01
    • 2011-01-15
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    相关资源
    最近更新 更多