前言:
之前我们学习了关于现成的创建的方式,和线程池方面的只是,那么我们来向再想一下关于一个线程从创建到销毁,都经历了哪些阶段,下面来看一下网上的一张,关于线程从创建到销毁生命周期的问题:
一、新建阶段:
在我们用new关键字创建了一个线程后,这个线程就处于新建状态,jvm会为线程分配内存空间,初始化成员变量
二、就绪阶段:
当我们创建的线程对象调用了start()方法后,该线程就处于就绪阶段,jvm会为计数器和方法栈,等待线程调度器调用。
三、运行状态:
就绪状态的线程获取到了cpu资源,开始运行run()或call()方法,则该线程进入运行状态。
四、阻塞状态:
当一个线程正在运行时,如果发生异常或者调用某些方法会使线程进入阻塞状态,具体有以下:
1、线程调用sleep()方法,主动放弃所占用的处理器资源。
2、线程在等待某个通知时(notify())。
2、线程调用了一个阻塞式IO方法,在该方法返回之前都会被阻塞。
3、线程试图获取一个同步锁,但该同步锁正在被其他线程所拥有的。
4、程序调用了suspend()方法将线程挂起,但这个方法容易造成死锁,不推荐使用。
五、死亡状态:
线程在以下情况下会进入死亡状态:
1、run()、call()执行完成后,线程正常结束
2、线程抛出了一个未捕获的Exception或err
3、代用了该线程的stop()方法来结束线程,该方法容易导致死锁不推荐。