首页 理论教育 Java线程生命周期

Java线程生命周期

时间:2023-10-19 理论教育 版权反馈
【摘要】:线程是有生命周期的,包括了线程从出现、执行到最终结束消亡时的各种状态。处于运行状态的线程可以变成阻塞状态或死亡状态。当设置的睡眠时间到期或获得系统资源后,线程可以重新进入就绪状态。图16.3.1线程生命周期动手写16.3.1其运行结果为:图16.3.2查看线程状态JVM中的每一个线程都是存在优先级的,这也决定了各个线程间被调度的顺序。

Java线程生命周期

线程是有生命周期的,包括了线程从出现、执行到最终结束消亡时的各种状态。一个线程从被创建开始,其生命周期总共分为五个阶段:

1.创建状态

线程被创建时(使用new和Thread创建线程对象),系统会分配资源并初始化该线程。这只是一个暂态,会一直保持到调用start()方法、线程进入运行或阻塞阶段之前。

2.就绪状态

对一个创建状态的线程调用了start()方法后,线程进入就绪状态。就绪状态的线程会处于队列中等待JVM调度,直到线程获取系统资源。

3.运行状态

处于就绪状态的线程获取系统内存资源时,会执行run()方法,此时线程处于运行状态。处于运行状态的线程可以变成阻塞状态或死亡状态。

4.阻塞状态

如果一个线程执行了sleep()方法、suspend()方法或试图获取另一个已被其他线程占有的锁时,会暂时失去系统资源而进入阻塞状态。当设置的睡眠时间到期或获得系统资源后,线程可以重新进入就绪状态。

5.死亡

当线程执行完毕、发生异常或错误时,线程会终止并进入死亡阶段,这个阶段的线程是不可调度的,即不可再运行。

图16.3.1 线程生命周期

动手写16.3.1(www.xing528.com)

其运行结果为:

图16.3.2 查看线程状态

JVM中的每一个线程都是存在优先级的,这也决定了各个线程间被调度的顺序。Java中的线程优先级是一个整数,取值为Thread.MIN_PRIORITY~Thread.MAX_PRIORITY,即1~10。默认情况下,每个线程在初始化后都会被分配一个优先级NORM_PRIORITY,即数值5。但是,在一些特殊情况下,系统不是完全按照优先级来调度线程的。

动手写16.3.2

其运行结果为:

图16.3.3 线程优先级设置

提示

动手写16.3.2每次的运行结果其实并不相同,实际上JVM不能完全保证高优先级线程的所有操作都在低优先级线程操作之前,但是大致趋势是高优先级线程先被执行

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈