1. 程式人生 > >java多執行緒程式設計總結(一)

java多執行緒程式設計總結(一)

為了深入學習java多執行緒程式設計,我閱讀了高洪巖老師的《Java多執行緒程式設計核心技術》這本書,不得不說,這本書的內容實在到位,這是一本值得推薦閱讀的書,我在閱讀完電子版後還特意去圖書館找到了這本書的紙質版,於是開始了java多執行緒程式設計的學習,期間將書本的每個知識點的程式碼都實現了一遍。

java多執行緒實現的兩種方式

要實現java多執行緒,必須要有特定的類,這種類通過實現Runnable介面和繼承Thread類並且實現和重寫run方法而獲得開啟多執行緒的能力,普通的類是不具備這樣的功能的。

  • 繼承Thread類,重寫run方法
  • 實現Runnable介面,實現run方法

其中run方法是沒有返回值(返回值為void)和引數的,run方法中的程式碼就是想要以多執行緒方式執行的程式碼。直接通過類產生物件,再用類物件呼叫run方法,並不會有任何多執行緒的特性,就和執行普通方法是一樣的。這時,如果要開啟多執行緒,必須呼叫start方法,這個方法會自動呼叫run方法,並且使它在不同的執行緒中執行。需要注意的是,start方法的呼叫順序與執行緒開啟的順序是無關的。

執行緒的中斷

執行緒的中斷涉及到三個函式

  1. interrupt()
  2. interrupted()
  3. isInterripted()

其中方法1的作用是設定執行緒的中斷狀態,注意這裡只是設定,而不會中斷任何執行緒,執行緒的中斷操作需要剩下的兩個方法輔助完成,方法2和方法3的返回型別都為布林型,即判斷執行緒是否中斷,但是他們有區別。

  • interrupted()方法判斷的是呼叫者所線上程的狀態,並且再判斷完後會將中斷狀態清除。
  • isInterrupted()方法判斷的呼叫的執行緒物件的狀態,不會清除中斷狀態。

執行緒的優先順序

執行緒獲取cpu執行的機會是隨機的,並且這個機率是由執行緒的優先順序決定的,可以通過setPriority()方法設定執行緒的優先順序,優先順序高的執行緒搶到cpu執行的機會更高,但並不總是優先順序高的執行緒先執行完成,執行緒優先順序具有以下性質

  • 優先順序是可以繼承的,子執行緒的優先順序預設等於父執行緒。
  • 優先順序是隨機的,即優先順序高的執行緒並不一定總是先執行完。

守護執行緒

守護執行緒的作用和它的名字一樣,它伴隨著整個程式的執行,知道所有非守護執行緒執行完畢後,自行銷燬,可以設定一個執行緒為守護執行緒,只需呼叫方法setDaemo(),java中最典型的守護執行緒就是垃圾回收器。另外,可以設定為守護執行緒的執行緒本身的生命週期應該很長。

多執行緒中的一些方法

  • suspend()和resume
    暫停一個執行緒和恢復一個執行緒,在這之間,執行緒始終獨佔著鎖。
  • yield()
    自己放棄cpu執行權,但是會在之後隨機的時間內重新獲取cpu。
  • sleep()
    執行緒掛起休眠
  • stop()
    強行中斷一個執行緒,該方法危險,不推薦使用。

  • isAlive()
    判斷一個執行緒是否處於活動狀態,所謂的活動狀態是指正在執行或者準備執行的狀態。

  • getID()
    每個執行緒都有一個唯一的標識,這個標識是一串數字,可以通過該方法獲得。

  • currentThread
    返回當前執行緒物件。

這是在閱讀這本書第一章後作出的總結,其中的程式碼貼在了我的github上。這裡暫時不公開github地址

直到現在,我發覺到了自己的一些問題,我的確閱讀過很多的書,但是卻缺乏總結,看過很多教程,程式碼量卻還是跟不上,但是一想我現在只不過是大一而已,所以我應該還有得久,所以以後度過好的書就自己寫寫讀後感和筆記吧,這樣自己的學習也會變得更加得充實。