1. 程式人生 > >多執行緒執行順序

多執行緒執行順序

                                                   多執行緒執行順序

我們建立兩個執行緒,讓奇數執行緒輸出奇數,偶數執行緒執行輸出偶數。

先來看看程式碼實現:

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了。