2017/7/31建立
/* * jdk的十個優先順序與作業系統之間映射的不好,所以只推薦MAX_PRIORITY,NORM_PRIORITY,MIN_PRIORITY * 三個優先順序 */public class SimplePriorities implements Runnable { private int countDown=5; //禁止編譯器對變數d進行最佳化 private volatile double d; private int priority; public SimplePriorities(int priority){ this.priority=priority; } public String toString(){ return Thread.currentThread()+":"+countDown; } @Override public void run() { //線程的優先順序應該在run內設定,因為線程只有在運行後設定的優先順序才是有效 Thread.currentThread().setPriority(priority); while (true) { for (int i = 0; i < 10000; i++) { //當除數為0時,程式沒有拋出異常,原因是double中的0不是真正的0或0.0 而是一個很長的 //可能是0.000000000001或其它,所以一個正數除以0.0結果就得很大很大 d+=(Math.PI+Math.E)/(double)i; if (i%1000==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 SimplePriorities(Thread.MIN_PRIORITY)); } exec.execute(new SimplePriorities(Thread.MAX_PRIORITY)); exec.shutdown(); }}