操作系统层面
1.初始状态:线程创建但未运行
2.可运行状态:处于可以运行的状态,但未获取到时间片,一但系统分配时间片,就会转换为运行状态
3.运行状态:处于正在运行的状态
4.阻塞状态:调用了阻塞API,如处于IO操作等,系统会自动让其进入阻塞状态,不会进行时间片竞争,直到被唤醒,然后变为可运行状态
5.终止状态:程序运行结束
JAVA层面
定义在Thread类的State枚举中,分为如下6种。
1.NEW:线程创建了,但未调用start()方法
2.RUNNABLE:线程被调用start()方法,切正则执行run方法的内容。
3.BLOCKED:线程处于等待锁资源释放的阶段
4.WAITING:线程调用无期限的等待方法,如join()、wait()方法
5.TIMED_WAITING:系统调用有期限的等待方法,如sleep(long millis)、wait(long timeout)
6.TERMINATED:线程运行结束
区别和联系
1.初始状态对应JAVA的NEW状态
2.JAVA的RUNNABEL状态包含线程的可运行状态和运行状态以及部分阻塞状态,如IO操作
3.剩余的阻塞状态等同于JAVA的BLOCK + WAITING + TIMED_WAITING
4.终止状态等同于JAVA的TERMINATED状态