【问题标题】:State of a thread in JavaJava中线程的状态
【发布时间】:2014-12-10 10:28:27
【问题描述】:

我有一个问题,比如创建线程时的状态是什么。并且该选项既准备好又可运行。所以我的疑问是,

  1. 有没有一种状态叫做就绪状态?
  2. 如果是这样,那么线程的可运行状态和就绪状态之间有什么区别吗?
  3. 如果是这样,那么合适的答案是什么?

提前致谢。

【问题讨论】:

  • 这不是一个exact重复..投票reopen。
  • 您可以通过以下方式回答您的问题:(a) 查看 java.lang.Thread 的 Javadoc,以及 (b) 编写一个您可以运行以查看其实际功能的程序。

标签: java multithreading runnable


【解决方案1】:

1 - 不,这是新的

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

3 - 新

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

【讨论】:

    【解决方案2】:

    这是java的线程状态自动机:

    【讨论】:

      【解决方案3】:

      实际上启动和执行一个线程涉及JVM和操作系统之间的协作。 JVM 调用底层操作系统。你提到的像ready这样的状态是线程处于waiting Threads set时的状态。这意味着线程已准备好执行,线程调度程序可以对其进行调度。

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

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

      【讨论】:

      • 等待和阻塞是两种不同的状态。
      • @Mikhail - Blocked 可以认为是Timed Waiting / Waiting。
      • 等待状态与定时等待无关。在第一种情况下,监视器被释放。线程可能因为IO而被阻塞,不仅仅是监听进入。这是三种不同的状态。在某些方面可能有点相似,但仅此而已。
      • @Mikhail - 如果您的线程被阻塞,那么它正在等待。如果您的程序或操作系统内部调用sleep(),则线程将被阻塞。您可以等待特定的时间,也可以等待中断/收到通知。因此,等待可以是定时的,也可以不是基于时间的。
      【解决方案4】:

      你可以在 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;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-15
        • 2017-10-23
        • 2013-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-22
        • 2018-01-17
        相关资源
        最近更新 更多