多執行緒-總結
阿新 • • 發佈:2020-08-15
建立 多執行緒方式1:【參考WindowTest】
-
建立一個繼承Thread的子類
-
重寫Thread中的run(),將需要執行的執行緒程式碼塞入方法體
-
建立Thread的子類物件
-
-
-
建立 多執行緒方式2:【參考WindowTest2】
-
建立一個Runnable介面的類
-
實現類去實現Runnable的抽象方法 run()
-
建立實現類的物件
-
將此物件作為引數傳遞到Thread類的構造器中,建立Thread物件
-
通過Thread類的物件呼叫start()
-
-
-
-
比較兩種建立執行緒的方式
開發中,優先選擇使用實現Runnable 介面的方式 原因 1. 實現的方式沒有類的單繼承行的侷限性 2.實現的方式更適合處理多執行緒共享資料的情況
聯絡:public class Thread implements Runnable 相同點:兩種方式都需要重寫run(),將執行緒需要執行的邏輯宣告在run()中
二.執行緒安全問題的解決
方式一 同步程式碼塊
synchronized(鎖){
//需要同步的程式碼塊
}
說明: 1.操作共享資料的程式碼,即是需要被同步的程式碼 2.共享資料:多個執行緒共同操作的變數 比如:本例子的Ticket 3.同步監視器:俗稱 鎖 ,任何一個類的物件,都可以充當鎖
要求: 多個執行緒必須要共用一把鎖
補充: 在實現Runable介面建立多執行緒的方式中,我們可以考慮使用this充當同步監視器解決了執行緒安全問題 操作同步程式碼時 ,只能有一個執行緒參與,其他執行緒等待 ,相當於一個單執行緒過程,效率低
方式二:同步方法
public synchronized void test{
//需要同步的方法體
}
如果操作共享資料的程式碼完整的宣告在一個方法中,我們不妨將此方法宣告同步
方法二 總結
-
同步方法仍然設計到同步監視器起,只是不需要顯示的宣告,要求仍然是必須共用一把鎖【參考WindowTest3與WindowTest4】
-
非靜態的同步方法,同步監視器:this
-