1. 程式人生 > >題目24-多線程兩種實現方式

題目24-多線程兩種實現方式

類重寫 直接 解決方案 做的 子類 是否為空 缺點 多線程同步 弊端

1、多線程兩種實現方式

(1)繼承Thread

  • 定義類繼承Thread
  • 重寫run方法
  • 把新線程要做的事寫在run方法中
  • 創建線程對象
  • 開啟新線程, 內部會自動執行run方法
    (2)實現Runnable
  • 定義類實現Runnable接口
  • 實現run方法
  • 把新線程要做的事寫在run方法中
  • 創建自定義的Runnable的子類對象
  • 創建Thread對象, 傳入Runnable
  • 調用start()開啟新線程, 內部會自動調用Runnable的run()方法

    2、多線程的安全問題及解決方案

    問題:當多線程並發, 有多段代碼同時執行時,數據會產生錯亂。
    方案:我們希望某一段代碼執行的過程中CPU不要切換到其他線程工作. 這時就需要同步。

    3、死鎖的產生原理

    多線程同步的時候, 如果同步代碼嵌套, 使用相同鎖, 就有可能出現死鎖

    4、多線程兩種實現方式的區別

    實現原理:
    繼承Thread : 由於子類重寫了Thread類的run(), 當調用start()時, 直接找子類的run()方法
    實現Runnable: 構造函數中傳入了Runnable的引用, 成員變量記住了它, start()調用run()方法時內部判斷成員變量Runnable的引用是否為空, 不為空編譯時看的是Runnable的run(),運行時執行的是子類的run()方法
    優缺點:
    繼承Thread :
    好處: 可以直接使用Thread類中的方法,代碼簡單

    弊端: 如果已經有了父類,就不能用這種方法
    實現Runnable:
    好處: 即使自己定義的線程類有了父類也沒關系,因為有了父類也可以實現接口,而且接口是可以多實現的
    弊端: 不能直接使用Thread中的方法需要先獲取到線程對象後,才能得到Thread的方法,代碼復雜

題目24-多線程兩種實現方式