5种状态,任意时刻,一个线程只能处于其中一个状态
- 新建 创建后尚未启动
- 运行 包括 Running和Ready,也就是有可能线程正在执行,或者正在等待cpu为它分配时间
- 无限期等待 Waiting 不会被分配cpu执行时间,需要被其他线程唤醒。比如以下方法
没有设置Timeout的Object.wait
没有设置Timeout的Thread.join
LockSuport.park
- 限期等待 Timed Waiting
这种也不会分配cpu时间,不过不需要其他线程唤醒,而是过一定时间被系统自动唤醒。以下方法会让线程进入限期等待
Thread.sleep
设置了Timeout的Object.wait
设置了Timeout的Thread.join
LockSuport.parkNanos
LockSuport.parkUntil
- 阻塞
阻塞和等待的区别是,阻塞是在等待着获取一个排他锁,这个事件将在另外一个线程放弃这个锁的时候发生,而等待状态是要么等待唤醒动作,或者过一段时间发生。阻塞状态是程序进入同步区域的时候发生的
- 结束 Terminared 线程结束