天天看點

多線程運作原理

多線程的随機性列印結果分析:

Java的線程排程為搶占式排程,列印出來的多線程為随機性列印結果.

下面我們解釋一下多線程情況下的随機性列印結果:

當我們運作程式時,JVM找OS開辟一條main方法通向cpu的路徑,這條路徑叫主線程,cpu通過主線程執行main方法.

而main方法中我們建立了新的線程,新線程開辟了一條通向cpu的新路徑,用來執行run方法.(不知道run方法的請看如何建立多線程)

此時對于cpu而言就有了兩條優先級相同的執行路徑,cpu就有了選擇的權利,cpu喜歡誰就會執行那條路徑,我們控制不了cpu,是以就有了程式的随機列印結果.

多線程運作原理

多線程記憶體圖解:

多線程運作原理

程式運作,main方法壓棧.

// 建立線程對象

MyThread mt = new MyThread();

此時的new MyThread();是儲存在堆記憶體中的.

如果直接用mt調用run方法,則run方法會直接在main方法所在的棧記憶體中被壓棧,那麼就是單線程了,也就沒意義了.

如果用mt調用start方法,則會開啟新的棧記憶體空間,在新的棧記憶體空間運作run方法.

再次建立新的線程對象進行調用start方法,會再次開啟新的棧記憶體空間,在新的棧記憶體空間運作run方法,以此類推.