线程的优先级将该线程的重要性传递给了调度器。优先权不会导致死锁(产生死锁的必要条件是互斥,请求保持条件,不剥夺条件,环路等待条件),绝大多数时间里面,线程都应该以默认的优先级运行。在下面的示例中,你可以通过getPriority()读取现有线程的优先级,通过setPriority()修改它的优先级。尽管JDK有10个优先级,但是它与大多数操作系统映射不是很好,比如 windows有7个优先级而且不是固定的,所以这种映射关系也是不确定的。Sun的Solaris有2的31次方个优先级,唯一可移植的方法是只是用MAX_PRIORITY,NORM_PRIORITY,MIN_PRIORITY。
//SimplyPriority.java
import java.util.concurrent.*;
public class SimplePriority implements Runnable {
private int countDown=5;
private volatile double d;
private int priority;
public SimplePriority(int priority) {
this.priority=priority;
}
public String toString() {
return Thread.currentThread()+" : "+countDown;
}
public void run() {
Thread.currentThread().setPriority(priority);
while(true) {
for(int i=1;i<100;i++) {
d+=(Math.PI+Math.E)/(double)i;
if(i%10==0)
Thread.yield();
}
System.out.println(this);
if(--countDown==0) return;
}
}
public static void main(String[] args) {
ExecutorService exec=Executors.newCachedThreadPool();
for(int i=0;i<5;i++)
exec.execute(new SimplePriority(Thread.MIN_PRIORITY));
exec.execute(new SimplePriority(Thread.MAX_PRIORITY));
exec.shutdown();
}
}