线程的几个状态
- Runnable:一般指該線程正在執行狀態中,該線程占用了資源,正在處理某個請求,例如有可能在對某個文件操作,有可能進行數據類型等轉換。
- Waiting on condition:等待資源,或等待某個條件的發生。具體原因需結合stacktrace來分析。
- 如果堆棧信息明確是應用代碼,則證明該線程正在等待資源。一般是大量讀取某資源,且該資源采用了資源鎖的情況下,線程進入等待狀態,等待資源的讀取。
- 又或者正在等待其他線程的執行等。
- 如果發現有大量的線程都在處在 Wait on condition,從線程 stack看,正等待網絡讀寫,這可能是一個網絡瓶頸的征兆。因為網絡阻塞導致線程無法執行。
- 一種情況是網絡非常忙,幾乎消耗了所有的帶寬,仍然有大量數據等待網絡讀寫;
- 另一種情況也可能是網絡空閑,但由于路由等問題,導致包無法正常的到達。
- 另外一種出現 Wait on condition的常見情況是該線程在 sleep,等待 sleep的時間到了時候,將被喚醒。
- Blocked:線程阻塞,是指當前線程執行過程中,所需要的資源長時間等待卻一直未能獲取到,被容器的線程管理器標識為阻塞狀態,可以理解為等待資源超時的線程。
- Waiting for monitor entry 和 in Object.wait():Monitor是 Java中用以實現線程之間的互斥與協作的主要手段,它可以看成是對象或者Class的鎖。每一個對象都有,也僅有一個 monitor。從下圖1中可以看出,每個 Monitor在某個時刻,只能被一個線程擁有,該線程就是 “Active Thread”,而其它線程都是 “Waiting Thread”,分別在兩個隊列 “ Entry Set”和 “Wait Set”里面等候。在 “Entry Set”中等待的線程狀態是 “Waiting for monitor entry”,而在 “Wait Set”中等待的線程狀態是 “in Object.wait()”。
圖 Java Monitor(圖片來自網絡)
轉載于:https://www.cnblogs.com/dailidong/p/7571145.html
總結
- 上一篇: 数据结构七——图
- 下一篇: 数据结构与算法总结(完结)