阿里面试官:改变线程状态的八个方法
阿里面試官:改變線程狀態(tài)的八個方法
原文鏈接:https://blog.51cto.com/u_15460453/5293150
在說線程的基本方法之前,我們先介紹一下線程的生命周期,也就是線程的幾個狀態(tài),線程有新建、就緒、運行、阻塞和死亡。
start方法
調(diào)用new方法會創(chuàng)建一個線程,這時候的線程處于新建狀態(tài),當(dāng)調(diào)用start方法的時候,線程處于就緒狀態(tài) 。
start方法和run方法 的區(qū)別在于start方法讓新建的線程進(jìn)入就緒狀態(tài) ,而run方法中是需要執(zhí)行的線程的代碼 ,當(dāng)調(diào)用run方法的時候,線程就是運行的狀態(tài),run方法執(zhí)行完成后,線程會被終止,CPU對其他線程進(jìn)行調(diào)度。
yield方法
yield方法是讓當(dāng)前線程釋放CPU ,和其他線程一起競爭時間片,它讓運行態(tài)的線程進(jìn)入就緒狀態(tài)。
sleep方法
sleep方法讓線程進(jìn)入超時等待狀態(tài) ,sleep方法不會釋放當(dāng)前的鎖,它屬于Thread類
wait方法
wait方法讓線程進(jìn)入等待狀態(tài),wait方法被調(diào)用后會釋放鎖,它屬于Object類 ,需要等待notify來進(jìn)行喚醒,
notify方法
notify方法是喚醒對象監(jiān)視器等待的線程,有個有多個就隨機選擇一個 。
join方法
join方法是讓當(dāng)前線程進(jìn)入阻塞狀態(tài),等其他線程結(jié)束后,當(dāng)前線程再由阻塞進(jìn)入就緒狀態(tài)。一般結(jié)果的分步計算可以join來進(jìn)行操作
setDaemon方法
setDaemon方法定義守護線程 ,守護線程是jvm級別的
Interrupt方法
interrupt用于線程的中斷,調(diào)用這個方法不會立即中斷,而是根據(jù)中斷的標(biāo)識來判斷是否改變線程的狀態(tài)。通過中斷標(biāo)志為安全終止線程 。
總結(jié)
這篇文章主要介紹了幾個改變線程的方法 ,start方法用于啟動線程 ,yield方法用于讓運行的狀態(tài)變?yōu)榫途w狀態(tài),sleep方法讓線程睡眠,不釋放鎖 ,wait方法同樣讓線程處于等待狀態(tài) ,釋放鎖,通過notify方法來進(jìn)行喚醒。還有join方法等等
展開閱讀全文投稿時間:2022-05-15 最后更新:2022-08-25
.jpg)