线程的生命周期

简介: 线程的生命周期

线程的生命周期

线程的生命周期包含新建状态、就绪状态、运行状态、阻塞状态和销毁状态等5个状态。

1、新建状态

我们使用new()方法,让它有自己的内存空间,这样new出来的就是线程的新建状态。

2、就绪状态

从上面的例子中可以看出,当我们调用start()方法时,就进入了就绪状态。注意这个时候线程不会立刻执行,而是等待CPU给他分配资源,当获得了CPU资源就开始执行,这个是面试官经常问的点。

3、运行状态

当线程获得CPU的资源时就进入了运行状态,这里我来重点说明一下运行状态的线程,面试官经常在这里做文章。

因为处于运行状态的线程是非常复杂的,它有可能会变成就绪状态、阻塞状态或者死亡状态。

当执行run()方法时,如果线程在运行过程中失去了CPU资源的时候(如调用yield()方法),该线程就会暂停运行,因为线程已经从运行状态变成了就绪状态。

那么通过哪些方式能让线程从运行状态变成就绪状态呢?

当正处在运行中的线程调用sleep方法时,会主动放弃占用的系统资源
当正处在运行中的线程调用一个阻塞式IO方法时,如果一直在等待该方法返回值的时候,那么就会造成线程被阻塞
调用yield()方法会暂停当前正在运行的线程
线程正在等待通知(notify)
调用了线程的suspend方法将该线程挂起
当然除了线程在运行状态变成就绪状态外,还能直接让运行状态的线程变成销毁状态,比如线程出现了异常或者调用了stop()、desyory()等方法。

4、阻塞状态

如果执行了sleep()方法,这时就会让线程进入阻塞状态,当然造成这种情况的不只是只有调用sleep方法,比如当等待I/O设备的时候也会造成线程进入阻塞状态。

5、销毁状态

当线程运行结束的时候,或者被强制终止的时候,线程就进入了销毁状态。当然还有我们上面提到的运行过程中发生异常的情况、JVM异常结束、调用了stop()、desyory()等方法都会使线程进入销毁的状态。注意处于销毁状态的线程是不能复活的,如果强制调用start()方法,则会抛出java.lang.IllegalThreadStateException异常。

相关文章
|
3月前
|
Java API 调度
Java 线程的生命周期
Java 线程的生命周期
38 0
|
3月前
|
安全 Java 调度
线程的状态和生命周期
线程的状态和生命周期
44 0
|
6月前
|
程序员 调度
【线程的生命周期】
【线程的生命周期】
|
3月前
|
调度
【面试问题】说说线程的生命周期?
【1月更文挑战第27天】【面试问题】说说线程的生命周期?
|
1天前
|
Java 调度
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
12 1
|
1月前
|
存储 开发框架 安全
【C++ 线程】深入理解C++线程管理:从对象生命周期到线程安全
【C++ 线程】深入理解C++线程管理:从对象生命周期到线程安全
88 0
|
1月前
|
存储 安全 IDE
C/C++ 作用域,生命周期,执行线程的概念
C/C++ 作用域,生命周期,执行线程的概念
18 2
|
3月前
|
算法 安全 Java
线程的状态和生命周期
线程的状态和生命周期
21 0
|
8月前
|
安全 Java 调度
线程的生命周期和安全问题
线程的生命周期和安全问题
45 0
|
8月前
|
算法 Java Go
【多线程系列-03】深入理解java中线程的生命周期,任务调度
【多线程系列-03】深入理解java中线程的生命周期,任务调度
132 0