线程是有生命周期的,包括了线程从出现、执行到最终结束消亡时的各种状态。一个线程从被创建开始,其生命周期总共分为五个阶段:
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不能完全保证高优先级线程的所有操作都在低优先级线程操作之前,但是大致趋势是高优先级线程先被执行。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。