JAVA线程状态
新建(New)
创建后尚未启动的线程
运行(Runable)
包括了操作系统线程状态中的Running和Ready,
正在执行
正在等待CPU为它分配执行时间
无限期等待(Waiting)
处于这种状态线程不会被分配CPU执行时间,它们要等待被其他线程显式地唤醒,以下方法会让线程陷入无限期的等待状态
- 没有设置Timeout参数的Object.wait()方法
- 没有设置Timeout参数的Thread.join()方法
- LockSupport.park()方法
期限等待(Timed Waiting)
处于这种状态的线程不会被分配CPU执行时间,不过无须等待被其他线程显示地唤醒,在一定时间滞后它们会由系统自动唤醒,例如以下方法
- Thread.sleep()
- 设置了Timeout参数的Object.wait()
- 设置了Timeout参数的Thread.join()
- LockSupport.parkNanos()
- LockSupport.parkUntil()
阻塞(Block)
线程被阻塞了,阻塞与等待的区别是,阻塞在等待着获取到一个排它锁,这个事件将在另外一个线程放弃这个锁的时候发生
等待状态则是等待一段时间,或者唤醒动作发生,在程序等待进入同步区域的时候,线程将进入这种状态
结束(Terminated)
已终止线程的线程状态,线程已经结束执行