【java多线程与并发库】---传统java多线程<4> .线程状态及优先级
1)线程状态
线程是一个动态运行的实体,每个线程都存在一个从创建、运行到消亡的过程。在一个线程的生命周期中,它将在新建状态、可运行状态、阻塞状态或死亡状态之间进行转换。通过线程的控制和调度可以改变线程的状态。
• 新建状态。利用new运算符创建线程对象之后、调用start() 成员方法之前就是线程的新建状态。这时,该线程仅仅是一个空对象,系统没有为它分配资源。
• 可运行状态。使用start()方法启动一个线程之后,线程就变为可运行状态。处于这个状态的线程可能正在执行,也可能没有执行,这取决于它是否获得了使用CPU的时间片及相关资源。
• 阻塞状态。当一个正在CPU上运行的线程由于等待某个事件发生而让出CPU时,就进入阻塞状态。
• 死亡状态。死亡状态是线程生命周期中的最后一个阶段,处于这个状态的线程不再具有执行的能力。正常运行的线程完成了全部工作或者线程的执行被强行终止都可导致线程处于死亡状态。
2)线程优先级
• Java中每一个线程都有一个优先级。默认情况下,线程将继承父线程的优先级。Java将线程的优先级分为10个等级,分别用1~10之间的数字表示。数字越大表明线程的级别越高。
• 相应地,在Thread类中定义了表示线程最低、最高和普通优先级的成员变量MIN_PRIORITY、MAX_PRIORITY和NORMAL_PRIORITY,代表的优先级等级分别为1、10和5。当一个线程对象被创建时,其默认的线程优先级是5。
• Java提供了一个线程调度器来监控进入就绪状态的所有线程。线程调度器按照线程的优先级决定线程的执行顺序,并采用"抢占式"策略来调度线程的执行。
• 为了获得某个线程的优先级,用户可以调用Thread类的getPriority()成员方法实现,而调用Thread类的setPriority(int newPriority)成员方法可以改变某个线程的优先级。