新建状态New:用new()语句创建的线程对象处于新建状态。
就绪状态Runnable:调用start(),该线程进入就绪状态。
运行状态Running:获得CPU,就绪状态就转为运行状态。
阻塞状态Blocked:放弃CPU,运行状态就转为阻塞状态。阻塞状态分三类:
1、处于对象等待池的阻塞状态Blocked in object’s wait pool:运行状态的线程调用wait()方法,就转到该状态。
2、处于对象锁池的阻塞状态Blocked in object’s lock pool:运行状态试图获得某同步锁时,当该同步锁已被占用,就进入该状态。
3、处于其他阻塞状态Otherwise Blocked:运行状态的线程调用sleep(),或 join()方法,或发出I/O请求,就转到该状态。
死亡状态Dead:执行完run()方法,就转为阻塞状态。
常用方法:
sleep() 放弃CPU,给其他所有优先级线程的运行机会,不释放锁,之后转向阻塞状态。
yield() 放弃CPU,给其他有相同优先级线程的运行机会,不释放锁,之后转向就绪状态。
join() 当前线程转向阻塞状态,等被 join 进来的线程运行结束后才能恢复运行。
wait() 该线程释放锁,进入Blocked in object’s wait pool状态。
notify() 将该线程从Blocked in object’s wait pool 转入 Blocked in object’s lock pool 。
interrupt() 中断阻塞,使 wait()、sleep() 抛出InterruptedException 。