黑馬程序員 線程(2)

---------------------- ASP.Net+Android+IOS開發 、 .Net培訓 期待與您交流! ----------------------

1.       創建線程的二種方式:實現Runnable接口

(1)    定義類實現Runnable接口

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

(3)    通過Thread類創建線程對象,並將Runnable接口的子類對象作爲Thread類的構造函數的參數進行傳遞

原因:因爲線程的任務對象都封裝在Runnable接口子類對象的run方法中

所以要在線程對象創建時就必須明確要運行的任務

(4)    調用線程對象的start方法開啓線程

2.       使用Runnable接口實現多線程的好處

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

(2)    避免了java單繼承的侷限性

Runnable接口創建線程對象較爲常用

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

(1)    多個線程在操作共享的數據

(2)    操作共享數據的線程代碼有多條

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

Java中用同步代碼塊可以解決此問題。

同步代碼塊的格式:

synchronized(對象)

{

       需要被同步的代碼;

}

4.       線程同步的好處:解決了線程安全問題

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

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

6.       同步的兩種體現形式:同步代碼塊,同步函數

7.       同步函數和同步代碼塊的區別

(1)    同步函數的鎖是固定的this

(2)    同步代碼塊的鎖是任意的對象

注意:開發時建議使用同步代碼塊,同步函數是同步代碼塊的簡寫形式(前提是同步代碼塊的鎖是this)

8.       靜態的同步函數使用的鎖是該函數所屬字節碼文件對象

字節碼文件對象的2種表現形式

getClass方法和類名.class屬性

9.       死鎖的體現形式之一:同步的嵌套

10.   多個線程操作同一個任務(即線程任務是一個對象)

---------------------- ASP.Net+Android+IOS開發 、 .Net培訓 期待與您交流! ----------------------
詳細請查看:http://edu.csdn.net
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章