線程狀態&&Wait和sleep的區別?
阿新 • • 發佈:2018-03-14
線程線程堆棧內容解析:
當一個線程占有一個鎖,但又執行在該鎖的wait上,線程堆棧中首先打印locked,然後打印-waiting on <0x22c03c60>
Wait和sleep的區別?
共同點:都是把當前線程阻塞住,等待或休眠
不同點:
Wait( ) : 當線程執行到wait()方法上,當前線程會釋放監視鎖,此時其他線程可以占有該鎖,一旦wait()方法執行完成,當前線程繼續持有該鎖,直到執行完鎖的作用域;如下圖:
Sleep( ) : sleep() 和鎖操作無關,如果該方法恰好在一個鎖的保護範圍內,當前線程即使執行sleep的時候,仍然保持監視鎖。。如下圖:
當一個線程占有一個鎖的時候,線程堆棧會打印一個-locked<0x22bffb60>
當一個線程正在等在其他線程釋放該鎖,線程堆棧會打印一個-waiting to lock<0x22bffb60>
線程的狀態
RUNNABLE線程正在運行狀態。(Runnable狀態的線程不一定消耗CPU)
TIMED_WAITING(on object monitor)表示當前線程被掛起一段時間,說明該線程正在執行obj.wait(ing time)方法,該線程不消耗cpu。
TIMED_WAITING(sleeping) 表示當前線程被掛起一段時間,正在執行Thread.sleep(int time )方法,如:
WAITING(on object monitor)當前線程被掛起,正在執行無參數的obj.wait()方法,只能通過notify喚醒,因此不消耗cpu
線程狀態&&Wait和sleep的區別?