线程的优先级
每个线程都有优先级,优先级可以表明该线程在程序里的重要性,优先级越高,就说明该线程越高级。当很多线程都处于就绪状态时,操作系统会优先选择优先级高的程序进行运行状态。但这并不意味着低优先级的得不到运行,只有高优先级的线程运行完毕才能执行他们,比如JVM中 垃圾回收的GC线程优先级就很低。
在Thread类中,Thread.MIN_PRIORITY (代表常量1),Thread.MAX_PRIORITY(代表常量10), Thread.NORM_PRIORITY(默认的常量5)
优先级就设置在Thread.MIN_PRIORITY到Thread.MAX_PRIORITY之间
;当线程未设置优先级时,此时为5。所有新产生的线程都继承父线程的优先级。
如图:
在当前程序中优先级5的线程A先执行,执行完后轮换给线程B,线程B执行完,若A还要执行,那么继续轮换给A
若A不执行,那么就轮换到更低优先级的线程C上;执行完后,若ABC都不执行,才能执行线程D.
线程的优先级可以用setPriority()方法来设置优先级
eg:
public static void setPriority(String threadName,int priority,Thread t){
t.setPriority(priority);
t.setName(threadName);
t.start();
}
public class PriorityTest(){
//...
setPriority("threadA",5,threadA)
setPriority("threadB",5,threadB)
setPriority("threadC",4,threadC)
setPriority("threadD",3,threadD)
}
//...
在上面例子中线程AB会优先执行,接着C 接着D