java多執行緒程式設計之優先順序
阿新 • • 發佈:2018-12-31
高優先順序的執行緒總是大部分先執行完,但是不是所有的先執行完。先執行完也不是因為先呼叫,如果更改優先順序,先執行完和和程式碼的呼叫順序無關。
優先順序具有一定的規則性,CPU總是儘量將執行資源讓給優先順序比較高的執行緒
優先順序較高的執行緒不一定每一次都先執行完
package com.CUPK.lsz.TraditionalThread; import java.util.Random; public class Threadpriorities { public static void main(String[] args) { for (int i = 0; i < 100; i++) { new Thread(new priorities1(9)).start(); new Thread(new priorities2(5)).start(); } } } class priorities1 implements Runnable { private int prioritie; long time; priorities1(int prioritie) { this.prioritie = prioritie; } @Override public String toString() { return "Thread 1 run time=" + time; } public void run() { Thread.currentThread().setPriority(prioritie); long beginTime = System.currentTimeMillis(); long addResult = 0; for (int i = 0; i < 10000; i++) { for (int j = 0; j < 100; j++) { Random random = new Random(); random.nextInt(); addResult += i; } } long endTime = System.currentTimeMillis(); time = endTime - beginTime; System.out.println(this.toString()); } } class priorities2 implements Runnable { private int prioritie; long time; priorities2(int prioritie) { this.prioritie = prioritie; } @Override public String toString() { return "Thread 2 run time=" + time; } public void run() { Thread.currentThread().setPriority(prioritie); long beginTime = System.currentTimeMillis(); long addResult = 0; for (int i = 0; i < 10000; i++) { for (int j = 0; j < 100; j++) { Random random = new Random(); random.nextInt(); addResult += i; } } long endTime = System.currentTimeMillis(); time = endTime - beginTime; System.out.println(this.toString()); } }