线程状态:
创建状态,就绪状态,运行状态,阻塞状态,死亡状态
创建状态:
在程序中用构造函数方法创建了一个线程对象后,新的线程对象就处于创建状态,此时,它已经获取了相应的资源,但还没有处于可运行状态,这时Thread类的方法来设置线程对象的属性如设置线程名(setName()),设置线程优先级(setPriority())等。
就绪状态:线程创建后,就可以通过调用start()方法启动线程,即进入就绪状态。此时,线程将进入线程队列,等待CPU资源,这表明他已经具备了运行条件,再未获得CPU资源时,仍不能真正执行,举例来说,去医院看病,某主任的专家号每天只有20个,挂上好的穿着还需在分诊处等待叫号,这里每个挂到专家好的患者可以看成一个就绪状态的线程
运行状态:当就绪状态的线程获得CPU资源时,即可转入运行状态,执行run()方法,对只有一个CPU的计算机而言,任何时刻只能又一个处于运行状态的线程占用CPU,即获得CPU资源。延续上面医院看病的例子,被叫到的患者才能真正就诊,而每个主任专家在一个时刻只能为一个患者看病。
阻塞状态:当就绪状态的线程因某种原因不能继续运行时,进入阻塞状态。阻塞状态是一种“不可运行”的状态,而处于这种状态的线程在得到一个特定的事件之后会转回可运行状态。举例来说,轮到小张看病了,医生为查明原因要求它去做了个化验,医生得到化验结果后才能继续诊断,如果把医生给小张看作一个线程则该线程此时即处于阻塞状态。
可能导致线程停止执行的条件如下:
- 因为线程优先级比较低,因此不能获得CPU资源
- 使用Sleep()方法是现成休眠。
- 通过调用wait()方法,使线程等待
- 使用yield()方法,线程显式出让CPU控制权
- 线程由于等待一个文件,I/O时间被阻塞
死亡状态:
一个线程run()方法运行完毕,线程则进入死亡状态,处于死亡状态的线程不具有继续运行的能力。