多執行緒執行順序
阿新 • • 發佈:2018-11-26
多執行緒執行順序
我們建立兩個執行緒,讓奇數執行緒輸出奇數,偶數執行緒執行輸出偶數。
先來看看程式碼實現:
package Test; import org.ietf.jgss.Oid; public class ThreadNum extends Thread{ private int first; public ThreadNum(String name,int first) { super(name); this.first=first; } public void run() { System.out.print("當前執行執行緒是:"+this.getName()+" "); for(int i=first;i<50;i+=2) { System.out.print(i+"\t"); } System.out.println(this.getName()+"結束"); } public static void main(String[] args) { System.out.println("當前的執行緒是"+Thread.currentThread().getName()); ThreadNum odd=new ThreadNum("奇數執行緒", 1); ThreadNum even=new ThreadNum("偶數執行緒", 2); odd.start(); even.start(); System.out.println("當前活動的執行緒是"+Thread.activeCount()); } }
我們新建了一個類繼承執行緒,重寫了run的方法。開始跑執行緒的時候先輸出執行緒名稱,再輸出對應的奇數或者偶數。
執行緒執行完之後會輸出執行緒執行結束。
看看執行的結果。
可以看到輸出完當前的執行緒是main之後,執行當前活動的執行緒是3並沒有執行輸出當前執行的執行緒是:奇數執行緒
這是因為多執行緒是非同步執行,輸出活動執行緒的語句並不會等待其他執行緒執行。而且開啟執行緒需要一定的時間。
所以會先執行當前活動的執行緒是3然後先執行奇數執行緒或者先執行偶數執行緒並沒有嚴格的順序,這是由作業系統
排程的。輸出當前執行緒是奇數執行緒後立即切換第二個執行緒,輸出當前執行緒是偶數執行緒
後切換執行緒。由於執行緒切換的速度快的話,所以會出現上面的情況。執行緒切換速度快慢與cpu處理速度和多核有關。
想要線上程執行之後輸出當前活動執行緒,在前面加上join就ok了。