当前位置: 首页 > 知识库问答 >
问题:

如何区分运行状态和java.lang.线程。状态。Java中的RUNNABLE

童冠玉
2023-03-14

当线程可运行时,它可以运行,也可以不运行。有没有办法将它与java区分开来。朗。丝线。状态#可运行

Java文档中线程的所有状态:

JAVA公共类线程。状态

扩展枚举

线程状态。线程可以处于以下状态之一:

尚未启动的新线程处于此状态。

RUNNABLE在Java虚拟机中执行的线程处于此状态。

阻塞等待监视器锁定而被阻塞的线程处于此状态。

WAITING无限期等待另一个线程执行特定操作的线程处于此状态。

TIMED_WAITING等待等待另一个线程在指定等待时间内执行操作的线程处于此状态。

TERMINATED已退出的线程处于此状态。

线程在给定时间点只能处于一种状态。这些状态是虚拟机状态,不反映任何操作系统线程状态。

package bj.thread;

public class ThreadApp2 {

    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getState());
    }
}

输出:

RUNNABLE

共有3个答案

胡安怡
2023-03-14

因为java线程依赖于os线程。例如,linux进程状态R(task_running)包含正在运行,并计划在运行队列中运行(就绪状态)

楚嘉玉
2023-03-14

假设Thread类定义了一个函数,boolean isRrun()。你能用它做什么?例如,这将毫无意义:

if (t.isRunning()) {
    doXYandZ();
}

它的问题是,即使线程t实际上在isRruning()调用期间的某个时间点正在运行,也不能保证它在t.is运行()返回true。不能保证它不会在doXYandZ()调用期间的某个时间停止运行。

操作系统能够区分正在运行的线程和非正在运行的线程,因为该状态由操作系统控制,并且操作系统需要记住哪些线程正在运行,哪些线程不是,因为调度它们是操作系统的工作。

Java运行时环境不区分RUNNING和RUNNABLE,因为它不控制在任何给定时间实际运行的线程,并且无法对该状态的更改做出有意义的反应。

佴英奕
2023-03-14

正如你所说,一个可运行的线程可能正在运行,也可能没有。这取决于操作系统为线程提供运行时间。不过,Java规范并没有将其称为单独的状态。正在运行的线程仍处于可运行状态,无法通过java简单地区分这两种状态。

 类似资料:
  • 程序运行状态 对于用户程序而言,中断的处理应当是不留任何痕迹的:只要中断处理改动了一个寄存器,都可能导致原本正在运行的线程出现错误。因此,在处理中断之前,必须要保存所有可能被修改的寄存器,并且在处理完成后恢复。因此,我们需要保存所有通用寄存器,sepc、scause 和 stval 这三个会被硬件自动写入的 CSR 寄存器,以及 sstatus。因为中断可能会涉及到权限的切换,以及中断的开关,这些

  • 区分状态和更新 在Subversion,我们已经设法抹去cvs status和cvs update之间的混乱。 cvs status命令有两个目的:第一,显示用户在工作拷贝的所有本地修改,第二,显示给用户哪些文件是最新的。很不幸,因为CVS难以阅读的状态输出,许多CVS用户并没有充分利用这个命令的好处。相反,他们慢慢习惯运行cvs update或cvs -n update来快速查看区别,如果用户忘

  • 运行状态 添加激活注册中心后,可以查看当前注册中心所有运行实例信息。 可以通过操作按钮对运行实例进行熔断与恢复操作。 可以查看所有从库信息,并进行从库禁用与恢复操作。

  • 有人能给我解释一下VisualVM中、、和线程状态之间的区别吗。 这是我发现的: :线程仍在运行 :线程正在Hibernate(对线程对象调用了方法yield()) :线程被互斥锁或屏障阻止,正在等待另一个线程释放锁 :停止的线程被暂停,直到获得许可。解压线程通常是通过调用线程对象上的方法unpark()来完成的。 :线程正在等待条件变为true以恢复执行 我无法理解的是州立公园,到底是什么让这条

  • 问题内容: 线程状态WAIT和线程状态BLOCKED有什么区别? 该Thread.State文档: 已阻止 该线程在等待监视器锁定时被阻止,处于此状态。 等待中 无限期等待另一个线程执行特定操作的线程处于此状态 没有向我解释差异。 问题答案: 线程在调用对象后进入等待状态。这称为 等待 状态。一旦线程达到等待状态,它将需要等待,直到其他线程调用或对象上。 通知此线程后,它将无法运行。可能是其他线程

  • > 我是Java多线程的新手。想知道线程池执行器中空闲线程的状态。它在RUNNABLE/WAITING中吗? 如果空闲线程处于RUNNABLE状态,新任务如何附加到空闲线程?AFAIK我们为线程/池分配一个可运行/可调用的对象。但我的问题是ThreadPoolExecitor如何将排队的可运行对象分配给空闲线程??