运行方法内部的java线程状态冲突;为什么线程状态不是“正在运行”
我正在做一些测试,以了解java中不同的线程状态,并遇到了一些查询
通常,当一个线程被实例化时,它被称为处于"NEW"
状态,然后当调用其上的start
()方法时,操作系统调度程序获得控制并处于"RUNNABLE"
状态,并且当start()
在内部调用run()
时,它被称为处于运行状态
Thread.currentThread().getState() // Returns the state of the thread
但是在执行下面的代码时观察到,即使在run
方法中进行测试,线程状态也不会显示为"RUNNING"
有人能帮我理解为什么它会这样吗
public static void main(String[] args) {
System.out.println("Hello World");
Thread t=new Thread(()->{
System.out.println("Hi");
System.out.println(Thread.currentThread().getState()); //// STATE DISPLAYED AS "RUNNABLE" AGAIN
});
System.out.println(t.getState()); // STATE DISPLAYED AS "NEW"
t.start();
System.out.println(t.getState()); // STATE DISPLAYED AS "RUNNABLE"
}
lambda表达式用于实现run()
方法,在该方法中,我们正在测试线程的状态,该状态再次显示为“RUNNABLE”,而不是“RUNNING”
# 1 楼答案
因为状态
RUNNING
不存在。如果查看getState
方法的定义,您会看到以下内容:如果您分析什么是
State
,您可以看到它是以下枚举:或从APIThread.State: