1.新建:new 创建一个线程对象
2.可运行:runnable 其他线程,比如主线程(main方法)执行start()方法,则会将线程放入 可运行线程池中,等待被线程调度选中,获得cpu的使用权
3.运行:running 该线程已经获得 cpu时间片 执行程序代码。
4.阻塞:block 因为线程因为某种原因放弃了cpu的使用权,也就是cup时间片,暂时停止运行 直到这个线程进入可运行(runnable)状态 才有机会获得cpu的使用权 变为running状态
阻塞情况分为三种:
1.等待阻塞: 线程执行 .wait() 方法 将线程放入 等待队列中 waiting queue 。
2.同步阻塞: runing线程 在执行程序 遇到同步锁并被其他线程占用的时候 】jvm会将当前线程放入到 锁池中,等待占用锁的线程执行完毕。
3.其他阻塞:当运行中的线程执行 sleep(), join() 等 或者io请求 则 jvm 会将该线程 设置为阻塞状态,知道 sleep join执行完毕,终止 或者 io执行完毕 则将该线程设置为可运行 runable状态
5.死亡 dead : 程序执行完 run方法 或者 main方法 或者 执行报错终止 则线程死亡,死亡线程不可重生。