執行緒狀態&&Wait和sleep的區別?

weixin_33766168發表於2017-11-21

執行緒堆疊內容解析:

執行緒狀態&&Wait和sleep的區別?

Wait和sleep的區別?

共同點:都是把當前執行緒阻塞住,等待或休眠
不同點: 
Wait( ) : 當執行緒執行到wait()方法上,當前執行緒會釋放監視鎖,此時其他執行緒可以佔有該鎖,一旦wait()方法執行完成,當前執行緒繼續持有該鎖,直到執行完鎖的作用域;如下圖:
執行緒狀態&&Wait和sleep的區別?
Sleep( ) : sleep() 和鎖操作無關,如果該方法恰好在一個鎖的保護範圍內,當前執行緒即使執行sleep的時候,仍然保持監視鎖。。如下圖:
執行緒狀態&&Wait和sleep的區別?
當一個執行緒佔有一個鎖的時候,執行緒堆疊會列印一個-locked<0x22bffb60>
當一個執行緒正在等在其他執行緒釋放該鎖,執行緒堆疊會列印一個-waiting to lock<0x22bffb60>
當一個執行緒佔有一個鎖,但又執行在該鎖的wait上,執行緒堆疊中首先列印locked,然後列印-waiting on <0x22c03c60>

執行緒的狀態

RUNNABLE執行緒正在執行狀態。(Runnable狀態的執行緒不一定消耗CPU)
執行緒狀態&&Wait和sleep的區別?
TIMED_WAITING(on object monitor)表示當前執行緒被掛起一段時間,說明該執行緒正在執行obj.wait(ing time)方法,該執行緒不消耗cpu。
執行緒狀態&&Wait和sleep的區別?
TIMED_WAITING(sleeping) 表示當前執行緒被掛起一段時間,正在執行Thread.sleep(int time )方法,如:
執行緒狀態&&Wait和sleep的區別?
WAITING(on object monitor)當前執行緒被掛起,正在執行無引數的obj.wait()方法,只能通過notify喚醒,因此不消耗cpu
執行緒狀態&&Wait和sleep的區別?

本文轉自屌絲逆襲部落格51CTO部落格,原文連結http://blog.51cto.com/5731674/2086757如需轉載請自行聯絡原作者


_追隨我心

相關文章