----------------------
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