Java中的线程状态

时间:2014-12-10 10:28:28

标签: java multithreading runnable

我得到一个问题,比如创建线程时的状态是什么。该选项既有就绪也可以运行。所以我怀疑是,

  1. 是否有任何状态称为就绪状态?
  2. 如果是这样,那么线程的runnable和ready状态之间有什么区别吗?
  3. 如果是,那么适当的答案是什么?
  4. 提前致谢。

4 个答案:

答案 0 :(得分:2)

1 - 不,这是新的

2 - NEW正在等待执行,RUNNABLE正在执行

3 - 新

谁能比Oracle更好地回答:https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.State.html

答案 1 :(得分:2)

这是java的线程状态automat:

enter image description here

答案 2 :(得分:1)

实际上启动执行线程涉及JVM和操作系统之间的协作。 JVM调用底层操作系统。您提到的状态如 ready 是Thread在等待线程集中的状态。这意味着线程准备好执行,并且线程调度程序可以安排它。

不要混淆操作系统和Java级别状态。从Java的角度来看,只有5个州

1. New
2. Runnable
3. Waiting
4. Timed Waiting
5. Terminated

答案 3 :(得分:1)

您可以在VM.java中找到答案,有六个状态

public static Thread.State toThreadState(int threadStatus) {
    if ((threadStatus & JVMTI_THREAD_STATE_RUNNABLE) != 0) {
        return RUNNABLE;
    } else if ((threadStatus & JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER) != 0) {
        return BLOCKED;
    } else if ((threadStatus & JVMTI_THREAD_STATE_WAITING_INDEFINITELY) != 0) {
        return WAITING;
    } else if ((threadStatus & JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT) != 0) {
        return TIMED_WAITING;
    } else if ((threadStatus & JVMTI_THREAD_STATE_TERMINATED) != 0) {
        return TERMINATED;
    } else if ((threadStatus & JVMTI_THREAD_STATE_ALIVE) == 0) {
        return NEW;
    } else {
        return RUNNABLE;
    }
}