线程的六种状态
线程是操作系统进行运算调度的最小单位,它可以分为六种状态
新建状态(NEW)
用new创建一个线程对象,这时候处于新建状态
可运行状态(RUNNABLE)
可运行状态又分为两种状态:就绪状态和运行状态
-
就绪状态(READY)
线程调用start()后就处于就绪状态,等待被线程调度选中获取CPU使用权 -
运行状态(RUNNING)
获得CPU时间片后执行run(),就处于运行状态。单核CPU一次只能有一个线程处于运行状态
阻塞状态(BLOCKED)
线程试图访问一个被其他线程锁定的synchronized代码块或方法时,就会进入阻塞状态等锁被释放。锁被释放后即变成就绪态
等待状态(WAITING)
假如线程调用了某对象的wait(),就会释放该对象的锁进入等待状态。这种状态只能等待别的线程唤醒变成就绪态(notify() / notifyAll())
超时等待状态(TIMED-WAITING)
当线程调用sleep()时,会让自己在指定的时间内暂停执行,不占用系统资源,等时间结束再进入就绪状态。假如线程调用另一个线程的join(),就会等待那个线程结束。这两个都是超时等待状态
终止状态(TERMINATED)
线程因为任务结束/异常退出run()方法