多執行緒基礎小結

NO IMAGE

1 實現方式

執行緒的實現有2種方式:

  • 繼承Thread;

  • 實現Runnable;(推薦使用)


2 實現Runnable好處

  • 將執行緒的任務從執行緒的子類中分離出來,進行了單獨的封裝。按照物件導向的思想將任務封裝成物件。

  • 避免了Java單繼承的侷限性;

  • 為後期的程式碼功能擴充套件性提供便利。


3 兩種執行緒方式區別

  • 繼承Thread:執行緒程式碼存放Thread子類run方法中;

  • 實現Runnable,執行緒程式碼存在介面的子類的run方法;

  • 在多執行緒中,Thread為多個執行緒物件,而Runnable只有一個Runnable物件。


4 執行緒安全問題的產生原因

  • 多執行緒在操作共同資料;

  • 操作共享資料的程式碼有多條。


5 解決安全問題

1 思路

就是將多條操作共享資料的程式碼進行封裝,當有執行緒執行這些程式碼的時候,其他的執行緒不可參與其中。

2 解決方案

使用synchronized關鍵字。

  • 同步程式碼塊:鎖物件為Obj;建議使用。

  • 非靜態同步函式:this,當前類物件;

  • 靜態同步函式:XXX.class 該函式所屬位元組碼檔案物件,不可以用getClass()表示(非靜態方法,不可用在靜態方法中)。

6 同步的利弊

  • 好處:解決了執行緒的安全問題;

  • 弊端:佔用CPU記憶體資源,多次判斷鎖,相對效率低,但在可接受範圍之內;

7 同步的前提

必須有多執行緒同時使用一個公共資源。