新建,就绪,运行,阻塞,死亡
当用new关键字创建一个线程时,还没调用start 就是新建状态。
调用了 start 方法之后,线程就进入了就绪阶段。此时,线程不会立即执行run方法,需要等待获取CPU资源。
当线程获得CPU时间片后,就会进入运行状态,开始执行run方法。
当遇到以下几种情况,线程会从运行状态进入到阻塞状态。
调用sleep方法,使线程睡眠。
调用wait方法,使线程进入等待。
当线程去获取同步锁的时候,锁正在被其他线程持有。
调用阻塞式IO方法时会导致线程阻塞。
调用suspend方法,挂起线程,也会造成阻塞。
阻塞状态只能进入就绪(可运行)状态,不能直接进入运行状态。因为,从就绪状态到运行状态的切换是不受线程自己控制的,而是由线程调度器,所决定。只有当线程获得了CPU时间片之后,才会进入运行状态。
当run方法正常执行结束时,或者由于某种原因抛出异常都会使线程进入死亡状态。另外,直接调用stop方法也会停止线程。但是,此方法已经被弃用,不推荐使用。