死鎖現象、線程的建立之實現Runnable接口

1、死鎖現象: 
一、由來:java中同步機制解決了線程安全問題,可是也同時引起死鎖現象。java

二、死鎖現象出現的根本緣由: 
1)存在兩個或者兩個以上的線程。 
2)存在兩個或者兩個以上的共享資源。安全

三、舉例:死鎖現象出現存在隨機性。 
1)未出現死鎖現象: 

2)出現死鎖現象: 
線程

四、死鎖現象的解決方案: 沒有方案。只能儘可能避免發生而已。對象

2、建立線程的第二種方式:實現Runnable接口 
一、回顧方式一 : 
1)自定義一個類繼承Thread類。 
2)重寫Thread類的run方法,把自定義線程的任務代碼寫在run方法上。 
3)建立Thread的子類對象,而且調用start方法啓動一個線程。 
注意:千萬不要直接調用run方法,調用start方法的時候線程就會開啓,線程一旦開啓就會執行run方法中代碼,若是直接調用run方法,那麼就 至關於調用了一個普通的方法而已。繼承

二、方式二: 
1)步驟: 
a)自定義一個類實現Runnable接口。 
b)實現Runnable接口的run方法,把自定義線程的任務定義在run方法上。 
c)建立Runnable實現類對象。 
d)建立Thread類 的對象,而且把Runnable實現類的對象做爲實參傳遞。 
e)調用Thread對象的start方法開啓一個線程。 
接口

2)存在的問題: 
問題1: 請問Runnable實現類的對象是線程對象嗎? 
Runnable實現類的對象並非一個線程對象,只不過是實現了Runnable接口的對象而已。只有是Thread或者是Thread的子類纔是線程對象。資源

問題2: 爲何要把Runnable實現類的對象做爲實參傳遞給Thread對象呢?做用是什麼? 
由於,自定義的run方法所屬的對象是Runnable接口的實現類類對象。因此要讓線程去執行指定對象的run方法。就必須明確該run方法所屬對象。 
做用:就是把Runnable實現類的對象的run方法做爲了線程的任務代碼去執行了。同步

3)實現方式和繼承方式有什麼區別呢? 
實現方式好處:避免了單繼承的侷限性。 
在定義線程時,建議使用實現方式。方法

4)Thread、Runnable對比 
繼承Thread:線程代碼存放Thread子類run方法中。 
實現Runnable:線程代碼存在接口的實現類的run方法。 
推薦使用: 第二種。 實現Runable接口的。 
緣由: 由於java是單繼承 ,多實現的。im

5)應用: 

相關文章
相關標籤/搜索