1. 程式人生 > 實用技巧 >多執行緒-總結

多執行緒-總結

一.多執行緒的建立

建立 多執行緒方式1:【參考WindowTest】

  1. 建立一個繼承Thread的子類

    1. 重寫Thread中的run(),將需要執行的執行緒程式碼塞入方法體

      1. 建立Thread的子類物件

        1. 通過子類物件呼叫start()

建立 多執行緒方式2:【參考WindowTest2】

  1. 建立一個Runnable介面的類

    1. 實現類去實現Runnable的抽象方法 run()

      1. 建立實現類的物件

        1. 將此物件作為引數傳遞到Thread類的構造器中,建立Thread物件

          1. 通過Thread類的物件呼叫start()

比較兩種建立執行緒的方式

開發中,優先選擇使用實現Runnable

介面的方式 原因 1. 實現的方式沒有類的單繼承行的侷限性 2.實現的方式更適合處理多執行緒共享資料的情況

聯絡:public class Thread implements Runnable 相同點:兩種方式都需要重寫run(),將執行緒需要執行的邏輯宣告在run()中

二.執行緒安全問題的解決

方式一 同步程式碼塊

 synchronized(鎖){
//需要同步的程式碼塊
}

說明: 1.操作共享資料的程式碼,即是需要被同步的程式碼 2.共享資料:多個執行緒共同操作的變數 比如:本例子的Ticket 3.同步監視器:俗稱 鎖 ,任何一個類的物件,都可以充當鎖

要求: 多個執行緒必須要共用一把鎖

補充: 在實現Runable介面建立多執行緒的方式中,我們可以考慮使用this充當同步監視器解決了執行緒安全問題 操作同步程式碼時 ,只能有一個執行緒參與,其他執行緒等待 ,相當於一個單執行緒過程,效率低

方式二:同步方法

public synchronized void test{
//需要同步的方法體
}

如果操作共享資料的程式碼完整的宣告在一個方法中,我們不妨將此方法宣告同步

方法二 總結

  1. 同步方法仍然設計到同步監視器起,只是不需要顯示的宣告,要求仍然是必須共用一把鎖【參考WindowTest3與WindowTest4】

  2. 非靜態的同步方法,同步監視器:this

  3. 靜態的同步方法,同步監視器是:當前類本身