標籤:通過 unit for log static 忽略 priority add 執行
線程優先順序:
在JAVA線程中,通過一個int型變數priority來控制線程優先順序,線程的有限機為1-10,預設為5,優先順序高的線程獲得的已耗用時間要高於優先順序低的線程。但這隻是一個提示,作業系統和JVM可能會根據自身情況忽略這個情況。請看下面代碼:
import java.util.ArrayList;import java.util.List;import java.util.concurrent.TimeUnit;public class Priority { private static volatile boolean notStart=true; private static volatile boolean notEnd=true; public static void main(String[] args) throws Exception{ List<Job> jobs=new ArrayList<>(); for(int i=0;i<10;++i){ int priority=i<5?Thread.MIN_PRIORITY:Thread.MAX_PRIORITY; Job job=new Job(priority); jobs.add(job); Thread thread=new Thread(job,"Thread"+i); thread.setPriority(priority); thread.start(); //thread.setPriority(188); 優先順序超出1-10,這個範圍時,運行期會拋異常; } notStart=false; TimeUnit.SECONDS.sleep(10); notEnd=false; for(Job job:jobs){ System.out.println("Job Priority:"+job.priority+",Conut:"+job.jobCount); } } private static class Job implements Runnable{ private int priority; private long jobCount; public Job(int priority) { this.priority = priority; } public void run() { while(notStart){ Thread.yield(); } while (notEnd){ Thread.yield(); jobCount++; } } }
執行結果如下:
Job Priority:1,Conut:4665639
Job Priority:1,Conut:4814788
Job Priority:1,Conut:4783102
Job Priority:1,Conut:5667441
Job Priority:1,Conut:4688465
Job Priority:10,Conut:4618501
Job Priority:10,Conut:5598076
Job Priority:10,Conut:5212791
Job Priority:10,Conut:5627112
Job Priority:10,Conut:4332899
線程狀態:
java線程入門一