线程的状态
新建 MyThreadInfo 类,打印线程对象属性,代码如下:
public class MyThreadInfo extends Thread {
@Override // 可以省略
public void run() {
System.out.println("MyThreadInfo 的线程实例正在执行任务");
// System.exit(1);
}
public static void main(String[] args) {
MyThreadInfo thread = new MyThreadInfo();
thread.start();
System.out.print("MyThreadInfo 的线程对象 \n"
+ "线程唯一标识符:" + thread.getId() + "\n"
+ "线程名称:" + thread.getName() + "\n"
+ "线程状态:" + thread.getState() + "\n"
+ "线程优先级:" + thread.getPriority());
}
}
执行代码打印如下:
MyThreadInfo 的线程实例正在执行任务
MyThreadInfo 的线程对象
线程唯一标识符:10
线程名称:Thread-0
线程状态:NEW
线程优先级:5
线程是一个对象,它有唯一标识符 ID、名称、状态、优先级等属性。线程只能修改其优先级和名称等属性 ,无法修改 ID 、状态。ID 是 JVM 分配的,名字默认也为 Thread-XX,XX是一组数字。线程初始状态为 NEW。
线程优先级的范围是 1 到 10 ,其中 1 是最低优先级,10 是最高优先级。不推荐改变线程的优先级,如果业务需要,自然可以修改线程优先级到最高,或者最低。
线程的状态实现通过 Thread.State 常量类实现,有 6 种线程状态:new(新建)、runnnable(可运行)、blocked(阻塞)、waiting(等待)、time waiting (定时等待)和 terminated(终止)。状态转换图如下:
线程状态流程大致如下:
- 线程创建后,进入 new 状态
- 调用 start 或者 run 方法,进入 runnable 状态
- JVM 按照线程优先级及时间分片等执行 runnable 状态的线程。开始执行时,进入 running 状态
- 如果线程执行 sleep、wait、join,或者进入 IO 阻塞等。进入 wait 或者 blocked 状态
- 线程执行完毕后,线程被线程队列移除。最后为 terminated 状态。