Java中的线程具有自己的优先级。优先级高的线程在竞争资源的时候更容易抢到资源。当然这只是概率的问题,如果人品不好,也会出现抢不过低优先级的情况。
由于线程的优先级调度和底层的操作系统有着密切的联系,并且也不容易预测,无法精确的控制。比如一个低优先级的线程可能一直抢不到资源,而使用无法运行,就可能产生饥饿(虽然优先级低,但也不能饿死他啊),因为在严格的情况下,需要自己的代码层解决线程调度的问题。
以下是一个线程优先级的简单demo
public class priority {
public static class HightPriority extends Thread{//高优先级,和低优先级执行相同的代码
static int count = 0;
public void run(){
while(true){
synchronized (priority.class) {//加锁,使优先级的差异表现更加明显
count ++;
if(count>1000000){
System.out.println("HightPriority线程执行完毕!!!");
break;
}
}
}
}
}
public static class LowPriority extends Thread{//低优先级,和高优先级执行相同的代码
static int count = 0;
public void run(){
while(true){
synchronized (priority.class) {//加锁,使优先级的差异表现更加明显
count ++;
if(count>1000000){
System.out.println("LowPriority线程执行完毕!!!");
break;
}
}
}
}
}
public static void main(String[] args) {
Thread hight = new HightPriority();
LowPriority low = new LowPriority();
hight.setPriority(Thread.MAX_PRIORITY);//内置3个静态变量之一: MAX_PRIORITY = 10
low.setPriority(Thread.MIN_PRIORITY); //内置3个静态变量之一: 内置3个静态变量 MIN_PRIORITY = 1
//内置3个静态变量之一: Thread.NORM_PRIORITY = 5
//数值越大,优先级越高
low.start();
hight.start();
}
}
在大多情况下,高优先级就率先执行完毕,打印出信息。