在了解了什么是线程和进程,怎么创建线程之后,再来深入理解线程
线程的生命周期
线程是一个动态执行的过程,它也有一个从产生到死亡的过程,这个就叫做线程的生命周期,线程的生命周期有五种状态:
1、新建(new Thread):
当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)。
例如:
Thread t1 = new Thread();
2、就绪(Runnable):
线程被启动,准备运行,但是不一定立马就能开始执行。因为线程正在就绪队列中等待CPU分配资源,若同时有多个线程处于就绪状态,都在准备运行,那他们就需要排队,这个就是就绪队列。
启动线程例子:
t1.start();
3、运行(Running):
线程从就绪队列中排队结束,获取到CPU分配的资源,并开始执行线程的代码。此时,除非该线程主动放弃CPU资源或者有更高优先级的线程进入,否则线程将一直运行到结束。
4、阻塞(Blocked):
由于某种原因导致正在运行的线程让出CPU资源并暂停自己的执行,即进入阻塞状态,需要等待外部的处理结束
存在以下几种情况会出现阻塞:
1)调用sleep()方法,进入睡眠状态。在指定的睡眠时间过去后可进入就绪状态
2)调用wait()方法,进入等待状态,调用motify()方法可以使线程重新进入就绪状态
3)被另一个线程调用suspend()方法所阻塞,调用resume()方法恢复
4)I/O阻塞
5)同步阻塞
5、死亡(Dead):
当线程执行完毕或者被其他线程杀死,线程就进入死亡状态,这时线程不可能再进入就绪状态等待执行
正常终止:正常运行run()方法后终止
异常终止:调用stop()方法让一个线程终止运行
图例: