Java-關於Thread

振宇要低調發表於2018-10-25

1)程式是受作業系統管理的基本執行單元,執行緒是程式中獨立執行的子任務

2)Thread.start()方法通知執行緒規劃器,告知其該執行緒已經準備完成,可以呼叫其run方法,這時就是非同步的方法;如果直接呼叫run,就沒有交給執行緒規劃器,就是同步方法。另外,執行start的順序並不是執行緒啟動的順序。

3)在jvm中i--有三步操作:1、取出i的值;2、做減法;3、賦予i值

4)isAlived方法是檢測執行緒是否屬於活動狀態

5)sleep的作用是指定毫秒數內讓當前正在執行的執行緒休眠,正在執行的執行緒指的是this.currentThread返回的執行緒

6)getID方法是獲取執行緒的唯一標識

7)Thread.stop停止執行緒,但是並不是執行緒安全的(呼叫Thread.stop時會拋一個ThreadDeath異常,通常不需要處理該異常,強制stop會釋放鎖(執行緒處理資料沒處理完,處理到一半就釋放鎖了,執行緒就退出了,這是資料是不正確的),會對正在處理的同步資料造成破壞,出現不一致結果。)

8)利用Thread.interrupt中止執行緒是安全的,但interrupt並不是立即停止,而是在當前執行緒中打一個停止標記

9)this.interrupted判斷當前執行緒是否是中斷狀態,執行後具有將狀態標誌清除的功能,也就是說,連續兩次執行this.interrupted,第二次得到的結果必定是false;this.isInterrupted判斷當前執行緒是否是中斷狀態,執行後不具有將狀態標誌清除的功能

10)停止執行緒的方法:

  A)執行緒裡是一個for迴圈,for迴圈一直判斷執行緒是否interrupted,如果被外部中止了,break結束for迴圈,然後繼續走for後面的語句,然後run方法就結束了;

  B)執行緒裡是一個for迴圈,for迴圈一直判斷執行緒是否interrupted,如果被外部中止了,丟擲一個異常,catch住,然後就結束run方法了;

  C)執行緒在sleep的時候,外部執行interrupt方法中止執行緒,會拋InterruptExpection,可以catch這個異常,然後退出;

  D)暴力停止,Thread.stop;

  E)使用return停止執行緒

推薦用拋異常的形式結束執行緒,這樣可以保證執行緒退出這個事件一直傳播出去

11)suspend暫停執行緒,resume恢復執行緒。suspend和resume如果使用不當,極容易造成執行緒永遠暫停,暫停後,執行緒的同步鎖是無法被釋放的

12)yield方法是放棄當前的CPU資源,將它讓給其他任務去佔用CPU執行時間,但放棄時間不確定,有可能剛剛放棄,馬上就獲得了CPU時間片

13)在作業系統中,可以給執行緒確定優先順序,優先順序較高的執行緒得到的CPU資源較多,為執行緒設定優先順序,有利於執行緒規劃器確定下一次選擇哪個執行緒來優先執行。setPriorty方法可以設定執行緒的優先順序,在1-10中間選擇。執行緒優先順序具有繼承特性,例如A執行緒啟動B執行緒,B執行緒與A執行緒的優先順序相同。優先順序具有規則性,高優先順序的執行緒總是大部分先執行完,但不代表高優先順序的執行緒全部先執行完;優先順序具有隨機性,優先順序較高的執行緒不見得每次都先執行完

14)守護執行緒是一種特殊的執行緒,當程式中不存在非守護執行緒了,守護執行緒就退出了。典型的執行緒是垃圾回收執行緒,當程式中沒有非守護執行緒(使用者執行緒)時,就沒有垃圾回收的意義了,垃圾回收執行緒就自行銷燬了。

 

 

 

相關文章