java執行緒的幾種常用方法
join()
Thread物件方法,用於使當前執行緒和後面的程式碼同步,使當前執行緒內操作執行完成後再執行後面的指令
wait()
Thread物件方法,使當前執行緒進入等待狀態,等待狀態的執行緒不會去競爭資源
sleep()
Thread類方法,使當前執行緒休眠指定時間,注意,sleep和wait的區別在於,執行緒sleep的時候,依然持有鎖,依然掌控著cpu資源,在sleep完成後,繼續運行當前執行緒。wait會使執行緒進入等待狀態,放棄對cpu資源的爭奪。
start()
Thread物件方法,用於開始一個執行緒,使執行緒進入就緒狀態,開始競爭資源
notify()
Thread物件方法,用於喚醒一個執行緒,注意,這個方法不是用來喚醒本執行緒,而是用來在一個執行緒中喚醒其它執行緒的,並且,喚醒的是和當前執行緒搶奪同一資源失敗的執行緒。舉個例子,執行緒A和執行緒B同時搶奪同一資源,執行緒B搶奪到了,執行完操作之後,在B中使用notify()方法喚醒執行緒,這時喚醒的就是A執行緒。如果有不止一個執行緒的情況下,notify()方法會隨機挑選一個執行緒去喚醒。
notifyAll()
Thread物件方法,和notify()方法一樣,都是用來喚醒和當前執行緒搶奪同一資源失敗的執行緒,只不過notifyAll()方法會喚醒所有符合條件的執行緒,而不是像notify()方法一樣隨機挑選一個執行緒喚醒。
setPriority()
Thread物件方法,為執行緒設定優先順序,注意這裡的設定優先順序並不是使得執行緒更容易爭搶到資源,這是一個誤區,具體分析請看這篇部落格:https://blog.csdn.net/qq_37856300/article/details/84390879
getPriority()
Thread物件方法,獲取當前執行緒的優先順序
currentThread()
Thread類方法,通過Thread.currentThread()可以獲取到當前正在執行的執行緒
getName()
Thread物件方法,獲取執行緒的名字
setName()
Thread物件方法,設定執行緒的名字
interrupt()
Thread物件方法,用來中斷一個執行緒
interrupted()
Thread類方法,用來檢測當前執行緒是否中斷,如果中斷返回true,未中斷返回false,注意,在呼叫這個方法之後,會清除中斷狀態
isInterrupted()
Thread物件方法,用來判斷呼叫這個方法的Thread物件是否中斷,並且不會清除此物件的中斷狀態
isAlive()
Thread物件方法,用來判斷執行緒是否存活,如果執行緒呼叫了start()方法並且還沒有消亡,那麼它就是存活的,返回true,否則返回false
getState()
Thread物件方法,返回執行緒的狀態。執行緒狀態一共有五種或者六種,分別為:
NEW(新建)、RUNNABLE(就緒和執行)、BLOCKED(阻塞)、WAITING(無限期等待)、TIMED_WAITING(有限期等待)、TERMINATED(消亡)
之所以說是五種和六種是因為有的地方把就緒和執行態拆分開了,有的地方把有限期等待和無限期等待合併為等待態了,這些都無所謂,不過java的getState方法確確實實只會返回這六種結果,執行緒的六種狀態的解釋請看這篇部落格:
https://blog.csdn.net/qq_37856300/article/details/84333963
getId()
獲取執行緒的id,執行緒的id是一個long型別的數,線上程的生命週期中這個id是唯一的,而且不會更改,但是等到這個執行緒的生命週期結束的時候,以後的執行緒可能會使用和它相同的id