JAVA學習筆記(13)多線程

 

  • 多線程的狀態:

  • CPU的執行資格:可以被cpu處理,在處理隊列中排隊。

  • CPU的執行權:正在被cpu處理。

  • 創建線程的第二種方式---實現Runnable接口

  • 創建線程的第一種方式:繼承Thread類。

  • 創建線程的第二種方式:實現Runnable接口:

  • 1定義類實現Runnable接口。

  • 2覆蓋接口中的run方法,將線程的任務代碼封裝到run方法中。

  • 3通過Thread類創建線程對象,並將Runnable接口的子類對象作爲Thread類的構造函數的參數進行傳遞。(因爲線程的任務都封裝在Runnable接口子類對象的run方法中,所以要在線程對象創建時就必須明確要運行的任務。)。

  • 4調用線程對象的start方法開啓線程。

  • 第二種方式(Runnable接口)的好處:

  • 1 將線程的任務從線程的子類中分離出來,進行了單獨的封裝。按照面向對象的思想將任務封裝成對象。

  • 2避免了java單繼承的侷限性。

  • 所以,創建線程的第二種方式較爲常用。

  • 賣票示例:

  • 線程安全問題的現象:

  • 線程安全問題產生的原因:

  • 1多個線程在操作共享的數據。

  • 2 操作共享數據的線程代碼有多條。

  • 當一個線程在執行操作共享數據的多條代碼過程中,其他線程參與了運算就會導致線程安全問題的產生。

  • 解決思路:就是將多條操作共享數據的線程代碼封裝起來,當有線程在執行這些代碼的時候,其他線程不可以參與運算。必須要當前線程把這些代碼都執行完畢後,其他線程纔可以參與運算。

  • 在java中,用同步代碼塊就可以解決這個問題。

  • 同步代碼塊的格式:

  • synchronized(對象)

  • {需要被同步的代碼;

  • }

  • 同步的好處和弊端:

  • 同步的好處:解決了線程的安全問題。

  • 同步的弊端:相對降低了效率,因爲同步外的都會判斷同步鎖。

  • 同步的前提:同步中必須有多個線程並使用同一個鎖。

  • 同步函數:

  • 驗證同步函數的鎖:同步函數的使用的鎖是this。

  • 同步函數和同步代碼塊的區別:同步函數的鎖是固定的this。

  • 同步代碼塊的鎖是任意的對象。

  • 建議使用同步代碼塊。

  • 靜態同步函數的鎖:獲取字節碼文件的字節碼文件對象。

  • 靜態的同步函數使用的鎖是該函數所屬字節碼文件對象可以用getClass方法獲取,也可以用當前類名.class表示。

  •  

  • 單例模式涉及的多線程問題:

  • 死鎖實例:死鎖常見情景之一:同步的嵌套。

  •  

  •  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章