題目24-多線程兩種實現方式
阿新 • • 發佈:2018-08-12
類重寫 直接 解決方案 做的 子類 是否為空 缺點 多線程同步 弊端 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-多線程兩種實現方式