转自:https://blog.csdn.net/zzti_erlie/article/details/95242525
介绍
简易的线程状态如下图
Java Thread线程内部有一个枚举内部类State,定义了Java语言线程状态的枚举值
- NEW(初始化状态)
- RUNNABLE (可运行/运行状态)
- BLOCKED(阻塞状态)
- WAITING (无时限等待)
- TIMED_WAITING(有时限等待)
- TERMINATED(终止状态)
Java 将操作系统层面的阻塞状态细分为 BLOCK,WAITING,TIMED_WAITING 三种状态
NEW:新建状态,线程被创建但未启动的状态。创建线程有三种方式
- 继承Thread类
- 实现Runnable接口
- 实现Callable接口
我们最常用的是通过实现接口这种方式,Runnable 和 Callable 接口的区别如下
- Runnable 无法获取返回值,而 Callable 可以获取返回值
- Runnable 无法抛出异常,而 Callable可以抛出异常
RUNNABLE(就绪状态):调用start之后运行之前的状态
RUNNING(运行状态):线程正在运行
BLOCKED(阻塞状态):进入以下状态,有以下几种情况
- BLOCK(同步阻塞):锁被其他线程占用,如等待进入 synchronized 方法或者代码块
- WAITING(主动阻塞):执行Object.wait(),Thread.join() 等
- TIMED_WAITING(等待阻塞):执行 Object.wait(long),Thread.sleep(long) 等
DEAD(终止状态):线程执行完毕
最后将各种方法补充到线程状态图上