java多執行緒程式設計總結(一)
為了深入學習java多執行緒程式設計,我閱讀了高洪巖老師的《Java多執行緒程式設計核心技術》這本書,不得不說,這本書的內容實在到位,這是一本值得推薦閱讀的書,我在閱讀完電子版後還特意去圖書館找到了這本書的紙質版,於是開始了java多執行緒程式設計的學習,期間將書本的每個知識點的程式碼都實現了一遍。
java多執行緒實現的兩種方式
要實現java多執行緒,必須要有特定的類,這種類通過實現Runnable介面和繼承Thread類並且實現和重寫run方法而獲得開啟多執行緒的能力,普通的類是不具備這樣的功能的。
- 繼承Thread類,重寫run方法
- 實現Runnable介面,實現run方法
其中run方法是沒有返回值(返回值為void)和引數的,run方法中的程式碼就是想要以多執行緒方式執行的程式碼。直接通過類產生物件,再用類物件呼叫run方法,並不會有任何多執行緒的特性,就和執行普通方法是一樣的。這時,如果要開啟多執行緒,必須呼叫start方法,這個方法會自動呼叫run方法,並且使它在不同的執行緒中執行。需要注意的是,start方法的呼叫順序與執行緒開啟的順序是無關的。
執行緒的中斷
執行緒的中斷涉及到三個函式
- interrupt()
- interrupted()
- isInterripted()
其中方法1的作用是設定執行緒的中斷狀態,注意這裡只是設定,而不會中斷任何執行緒,執行緒的中斷操作需要剩下的兩個方法輔助完成,方法2和方法3的返回型別都為布林型,即判斷執行緒是否中斷,但是他們有區別。
- interrupted()方法判斷的是呼叫者所線上程的狀態,並且再判斷完後會將中斷狀態清除。
- isInterrupted()方法判斷的呼叫的執行緒物件的狀態,不會清除中斷狀態。
執行緒的優先順序
執行緒獲取cpu執行的機會是隨機的,並且這個機率是由執行緒的優先順序決定的,可以通過setPriority()方法設定執行緒的優先順序,優先順序高的執行緒搶到cpu執行的機會更高,但並不總是優先順序高的執行緒先執行完成,執行緒優先順序具有以下性質
- 優先順序是可以繼承的,子執行緒的優先順序預設等於父執行緒。
- 優先順序是隨機的,即優先順序高的執行緒並不一定總是先執行完。
守護執行緒
守護執行緒的作用和它的名字一樣,它伴隨著整個程式的執行,知道所有非守護執行緒執行完畢後,自行銷燬,可以設定一個執行緒為守護執行緒,只需呼叫方法setDaemo(),java中最典型的守護執行緒就是垃圾回收器。另外,可以設定為守護執行緒的執行緒本身的生命週期應該很長。
多執行緒中的一些方法
- suspend()和resume
暫停一個執行緒和恢復一個執行緒,在這之間,執行緒始終獨佔著鎖。 - yield()
自己放棄cpu執行權,但是會在之後隨機的時間內重新獲取cpu。 - sleep()
執行緒掛起休眠 stop()
強行中斷一個執行緒,該方法危險,不推薦使用。isAlive()
判斷一個執行緒是否處於活動狀態,所謂的活動狀態是指正在執行或者準備執行的狀態。getID()
每個執行緒都有一個唯一的標識,這個標識是一串數字,可以通過該方法獲得。currentThread
返回當前執行緒物件。
這是在閱讀這本書第一章後作出的總結,其中的程式碼貼在了我的github上。這裡暫時不公開github地址
直到現在,我發覺到了自己的一些問題,我的確閱讀過很多的書,但是卻缺乏總結,看過很多教程,程式碼量卻還是跟不上,但是一想我現在只不過是大一而已,所以我應該還有得久,所以以後度過好的書就自己寫寫讀後感和筆記吧,這樣自己的學習也會變得更加得充實。