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