Java线程的状态转换
Java線程,由運(yùn)行狀態(tài)轉(zhuǎn)換成阻塞狀態(tài)的原因,以及從阻塞狀態(tài)轉(zhuǎn)換成就緒狀態(tài)
1、當(dāng)線程試圖獲取某個(gè)對(duì)象的同步鎖時(shí),如果,該鎖被其他線程所持有,則當(dāng)前線程會(huì)進(jìn)入阻塞狀態(tài),如果,想從阻塞狀態(tài)進(jìn)入就緒狀態(tài),必須得獲取到其他線程所持有的鎖
2、當(dāng)線程調(diào)用了一個(gè)阻塞式的IO方法時(shí),該線程就會(huì)進(jìn)入阻塞狀態(tài),如果,向進(jìn)入就緒狀態(tài),就必須要等到這個(gè)阻塞的IO方法返回
3、當(dāng)線程調(diào)用了某個(gè)對(duì)象的wait()方法時(shí),也會(huì)使線程進(jìn)入阻塞狀態(tài),如果,向進(jìn)入就緒狀態(tài),就需要使用notify()方法喚醒該線程
4、當(dāng)線程調(diào)用了Thread的sleep(long millis)方法時(shí),也會(huì)使線程進(jìn)入阻塞狀態(tài),在這種情況下,只需等到線程睡眠的時(shí)間到了以后,線程就會(huì)自動(dòng)進(jìn)入就緒狀態(tài)
5、當(dāng)一個(gè)線程中,調(diào)用了另一個(gè)線程的join()方法時(shí),會(huì)使當(dāng)前線程進(jìn)入阻塞狀態(tài),在這種情況下,需要等到新加入的線程運(yùn)行結(jié)束后,才會(huì)結(jié)束阻塞狀態(tài),進(jìn)入就緒狀態(tài)
注意
線程從阻塞狀態(tài),只能進(jìn)入就緒狀態(tài),而不能直接進(jìn)入運(yùn)行狀態(tài),也就是說(shuō),結(jié)束阻塞的線程,需要重新進(jìn)入可運(yùn)行池中,等待系統(tǒng)的調(diào)度
總結(jié)
以上是生活随笔為你收集整理的Java线程的状态转换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java前台线程与后台线程
- 下一篇: Java线程的死锁