线程与多线程(三)——线程的状态

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32625839/article/details/81232072

三、线程的状态

3.1线程的四种状态
        线程的生命周期可以分成4个阶段,即线程的4种状态,分别为新生状态可运行状态阻塞状态死亡状态。一个具有生命的线程,总是处于这4种状态之一。 线程的生命周期如下图所示。

1.新生状态(New Thread)       
        创建线程对象之后,尚未调用其start( )方法之前,这个线程就有了生命,此时线程仅仅是一个空对象,系统没有分配资源。此时只能启动和终止线程,任何其他操作都会引发异常。
2. 可运行状态(Runnable)
        当调用sart( )方法启动线程之后,系统为该线程分配除CPU外的所需资源,这个线程就有了运行的机会,线程处于可运行的状态,在这个状态当中,该线程对象可能正在运行,也可能尚未运行。对于只有一个CPU的机器而言,任何时刻只能有一个处于可运行态的线程占用处理机, 获得CPU资源,此时系统真正运行线程的run( )方法。
3. 阻塞状态(Blocked)
       一个正在运行的线程因禁种原因不能继续运行时,进人阻塞状态。阻塞状态是一种“不可运行”的状态,而处于这种状态的线程在得到个特定的事件之后会转回可运行状态。
导致一个线程被阻塞的原因可能是:
《1》调用了Thread类的静态方法sleep( )。
《2》一个线程执行到一个IO操作时,如果I/O操作尚未完成,则线程将被阻塞。
《3》如果一个线程的执行需要得到” 个对象的锁,而这个对象的锁正被别的线程占用,那么此线程会被阻塞。
《4》suspend( )方法被调用而使线程被挂起时,线程进入阻塞状态。但suspend( )容易导致死锁,已经被JDK列为过期方法,基本不再使用。
《5》处于阻塞状态的线程可以转回可运行状态,例如,在调用sleep( )方法之后,这个线程的睡眠时间已经达到了指定的间隔,那么它就有可能重新回到可运行状态。或当一个线程等待的锁变得可用的时候,那么这个线程也会从被阻塞状态转入可运行状态。
4.死亡状态(Dead)
        一个线程的run( )方法运行完毕、stop( )方法被调用或者在运行过程中出现未捕获的异常时,线程则进人死亡状态。

3.2线程优先级
        线程的优先级用1~10表示,1表示优先级最高,默认值是5。每个优先级对应一个Thread类的公用静态常量。例如:
public static tinal int NORM PRIORITY=5;
public static final int MIN PRIORITY=1;
public static final int MAX PRIORITY=10;
        每个线程的优先级都介于Thread.MIN_PRIORITY和Thread.MAX_PRIORITY 之间。
       线程的优先级可以通过setPriority(int grade)方法更改,此方法的参数表示要设置的优先级,它必须是个1~10 的整数。例如,myThread.setPrority(3);线程对象myThread的优先级别被设置为3。

展开阅读全文

没有更多推荐了,返回首页