天天看點

多線程基礎筆記小結

多線程的意義:提高程式的使用率,cpu的使用率

實作線程的幾種方式

繼承thread類

重寫run方法

通過start調用啟動

- 建一個類,繼承thread類,重寫run方法。

- 在另一個類裡把剛才那個類new出來,調用對象的start方法

- 這是一個線程 多個線程的話要new多個對象出來 同時調用start方法

實作runnable接口

重寫run

把該類作為參數傳到thread裡

通過start調用

- 建一個類,實作runnable接口,重寫run方法

- 在另一個類裡把剛才的類new出來,再new一個thread類出來,将剛才的對象放在thread對象内

- 要開多個線程的話就new多個thread對象

- 通過thread對象的start方法來運作線程

開發中一般用第二種:

避免java單繼承的局限性

适合多個相同程式代碼處理同一個資源的情況

線程的命名

通過setname方法來設定名字

(繼承thread類)在類中寫一個構造方法,傳一個string對象(名字)進去,構造方法内用super調用

thread類的有參構造

(實作runnable接口)在newthread的時候,将對象和線程的名字兩個都傳進去。

run和start的差別

run:僅僅封裝被線程執行的代碼,直接調用的話相當于普通方法

start:首先啟動一個線程,通過jvm調用run方法

優先級 setpriority()

優先級越高,搶到的機率越高,并不是高的一定能搶到

1~10的整數,預設是5

放在start之前

休眠 sleep()

加入線程 join() 會把目前線程執行完 再執行其他線程

**線程禮讓 yeild() **讓目前運作狀态的線程釋放自己的cpu資源,從運作狀态變為就緒狀态,然後重新和其他線程搶資源 禮讓不一定成功 當線程轉為就緒狀态時,搶到cpu,從中斷位置繼續執行

守護線程(背景線程) setdaemon(true)

當所有非守護線程死亡後守護線程也會死亡,由于裝置延遲,守護線程會運作一小段再死亡

中斷線程

stop()太暴力 不建議使用

interrupt() 隻能改變目前線程的狀态為中斷(true),并不能中斷一個正在運作的線程,在這個基礎上進入阻塞狀态(sleep,wait,join),就會抛出interruptedexception,中斷狀态被清除,重新設定為false,線程退出。 無論是先中斷還是先阻塞都能達到停止線程的目的。

this.interrupted()方法 測試目前線程是否中斷(靜态),會傳回上一次的中斷狀态,并且會清除該狀态,連續調用兩次,第一次傳回true,第二次傳回false。

this.isinterrupted()方法 測試目前線程是否中斷,但是不會清除目前狀态。

繼續閱讀