【線程系列一】線程如何運行
阿新 • • 發佈:2017-11-14
虛擬機 start rgs thread println 模式 搶占 art throws
1 public static void main(String[] args)throws Exception { 2 Thread th= new Thread(new MyRunnable("hello1")); 3 th.start(); 4 System.out.println("當前主線程 "+Thread.currentThread().getName()); 5 System.out.println("該線程 "+th.getName()); 6 }
上述代碼,在內存中的狀態如下圖所示。執行步驟主要是下面四步。
1、運行上述java文件,由虛擬機執行類的入口main函數,分配了一個主線程。
2、main方法在主線程所在棧中,壓棧,實例一個新的子線程,並開啟了這個子線程
3、jvm給子線程分配了一塊子線程棧,並在這個子線程棧中,將run()壓棧執行。
4、由cpu調度各線程,分配給各線程的時間,由cpu決定,有兩種模式,分時調度和搶占調度。
~分時調度
所有線程輪流使用 CPU 的使用權,平均分配每個線程占用 CPU 的時間。
~搶占式調度
優先讓優先級高的線程使用 CPU,如果線程的優先級相同,那麽會隨機選擇一個(線程隨機性),Java使用的為搶占式調度。
【線程系列一】線程如何運行