【发布时间】:2016-06-28 17:34:21
【问题描述】:
我正在尝试理解 java 中的多线程。当我经历 Java 线程可能处于的各种状态时(新的、可运行的、运行的、等待/阻塞的、死的)。我尝试运行一些简单的代码来检查线程的状态。
我创建了一个扩展 Thread 并覆盖 run() 方法的类 MyThread。
package com.practice.threads;
public class MyThread extends Thread {
@Override
public void run() {
super.run();
System.out.println("Running Mythread.");
System.out.println("State of thread : " + this.getState()); // line 2
}
}
现在我创建了一个简单的类来测试线程的状态:
package com.practice.threads;
public class ThreadStateDemo {
/**
* @param args
*/
public static void main(String[] args) {
MyThread myThread = new MyThread();
System.out.println("State of thread : " + myThread.getState()); // line 1
myThread.start();
}
}
运行这个类给出以下输出:
线程状态:新 运行我的线程。 线程状态:RUNNABLE第 2 行的输出是我不明白的。当一个线程实例的run()方法正在执行时,它怎么会处于RUNNABLE状态呢?我在一本书(SCJP Suncertified Programmer)中看到了 RUNNING 状态的提及。它不应该显示 RUNNING 吗?
【问题讨论】:
-
Nope, there is no
RUNNINGstate.RUNNABLE表示:Java 虚拟机中执行的线程处于此状态。 -
哦,好吧!我发现 RUNNING 是一本书(SCJP Suncertified Programmer)中提到的一个状态。但没有检查 Oracle 文档。谢谢!
-
大多数操作系统区分“可运行”(在允许线程继续之前不需要发生任何事情)和“运行”(CPU实际上正在执行线程的代码)。但是,Java 语言规范和 Java 标准库没有这样的区别——也许是因为在每个实际实现中,线程调度都被委托给了操作系统。
标签: java multithreading