1、NEW
new Thread()
此时线程对象状态为NEW
2、RUNNABLE
new Thread().start()
调用start()方法状态为RUNNABLE
3、BLOCKED
synchronized代码、lock.lock()、Thread.yield()都会让线程进入阻塞状态
4、WAITING
调用wait()、join()方法
5、TIMED_WAITTING
调用wait(long time)、join(long time)、sleep(long time)方法
6、TERMINATED
线程代码执行结束、抛出异常、jvm关闭
另外记录几个带时间的方法:
sleep(long time)线程休眠一定时间,不释放锁,时间结束后继续执行;
wait(long time)线程释放锁,进行等待队列,时间结束后自动唤醒,但是要继续参与锁的竞争;
join(long time)加入一个线程并运行,时间结束后不管目标线程是否执行结束,当前线程继续运行;
注意:join方法会释放锁,因为底层调用的是wait()方法,但是释放的是目标线程的锁,而不是其他对象的锁。