我正在做一些测试,以了解java中不同的线程状态,并被一些查询所打动。
通常,当线程被示例化时,它被称为 "NEW"
状态,然后在调用 start
()方法,操作系统调度程序获得控制并处于 "RUNNABLE"
陈述并进一步说明 run()
由内部调用 start()
据说它处于运行状态。
Thread.currentThread().getState() // Returns the state of the thread
但是在执行下面的代码时观察到,线程状态永远不会显示为 "RUNNING"
即使在室内测试 run
方法。
有人能帮我理解为什么它会这样吗?
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条答案
按热度按时间tez616oj1#
因为国家
RUNNING
不存在。如果你看看getState
方法可以看到以下内容:如果你分析什么
State
是,您可以看到它是以下枚举:或从api thread.state:
public static enum thread.state扩展enum<thread.state>线程状态。线程可以处于以下状态之一:
尚未启动的新线程处于此状态。
在java虚拟机中执行的线程处于此状态。
阻塞等待监视器锁定而被阻塞的线程处于此状态。
正在无限期等待另一个线程执行特定操作的线程处于此状态。
timed\u waiting正在等待另一个线程执行某个操作达指定等待时间的线程处于此状态。
终止已退出的线程处于此状态。线程在给定的时间点只能处于一种状态。这些状态是不反映任何操作系统线程状态的虚拟机状态。