介绍
简易的线程状态如下图

 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(终止状态):线程执行完毕
 最后将各种方法补充到线程状态图上











