通過單執行緒程式的小例子來深入理解執行緒
程式**:
執行流程:
通過程式執行結果可以看出,主線程建立兩個物件,然後呼叫d1.show()方法,主線程把show方法進棧,執行show方法中的**,執行完show方法出棧,此時 d2.show()沒有被執行,緊接著呼叫d2.show()方法。
程式執行簡圖
1、多執行緒例項:
程式**:
程式執行流程:
三個執行緒在同時執行:主線程、負責執行d1的執行緒、負責執行d2的執行緒
程式流程簡圖:
2、執行緒的建立方式
1、繼承thread類
步驟:1、繼承thread類
2、覆蓋run方法
3、建立子類物件就是建立執行緒物件
4、呼叫thread類中的start方法(啟動執行緒)
例子:
2、實現runnable介面
步驟:1、定義乙個類實現runnable介面。
2、覆蓋runnable介面中的run方法,將執行緒要執行的任務**封裝到該方法中。
3、通過thread類建立執行緒物件,並將實現了runnable介面的類的物件作為thread類的建構函式的引數進行傳遞。
4、呼叫thread類的start方法,開啟執行緒。
例子:
總結:1、start()開啟執行緒後,都會執行run方法,說明run方法中儲存的是執行緒要執行的**。
所以,要記住,自定義執行緒的任務**都儲存在run方法中。而主線程的**都放在main方法中。
2、如果不對父類中的run方法進行覆蓋,會呼叫父類中的run方法,父類中的run方法什麼也不做,就失去建立執行緒的意義。
3、實現runnable介面好處:
1、避免了繼承thread類的單繼承的侷限性。
2、runnable介面出現更符合物件導向,將執行緒任務單獨進行物件的封裝。
3、runnable介面的出現,降低了執行緒物件和執行緒任務的耦合性。
三、thread 中的常用方法
start():兩件事:1、開啟執行緒 2、呼叫run方法
getname():返回該執行緒的名稱
currentthread():返回當前正在執行的執行緒物件,靜態方法。thread.currentthread().getname();
呼叫start方法和呼叫run方法的區別(d1.start()和d1.run())-----d1上文中的d1物件
呼叫start方法會開啟執行緒,讓開啟的執行緒去執行run方法中的執行緒任務。
直接呼叫run方法,執行緒並未開啟,去執行run方法的只有主線程
四、多執行緒的記憶體圖
五、
多執行緒2,執行緒池深入理解
如果覺得好,可以star一下,謝謝!當然也歡迎提出建議,萬事起於忽微,量變引起質變!1.1 建構函式public threadpoolexecutor int corepoolsize,int maximumpoolsize,long keepalivetime,timeunit unit,bloc...
多執行緒2,執行緒池深入理解
public threadpoolexecutor int corepoolsize,int maximumpoolsize,long keepalivetime,timeunit unit,blockingqueueworkqueue 1.2 引數解析 1.3 遵循的規則 1.4 使用執行緒池管理...
多執行緒程式設計之pthread執行緒深入理解
不同的平台和作業系統上 程序和執行緒的實現機制不完全一致 但是一般來說執行緒棧都是獨立的 只要得到位址就可以相互訪問 pthread是 posix threads 的簡稱,是posix的執行緒標準。前幾篇部落格已經能給你初步的多執行緒概念,在進一步學習執行緒同步等多執行緒核心知識之前,需要對多執行緒...