java 线程之线程状态
Thread?類中的線程狀態(tài):
public enum State {NEW,//新建RUNNABLE,// 執(zhí)行態(tài)BLOCKED, //等待鎖(在獲取鎖的池子里)WAITING,//等待狀態(tài)TIMED_WAITING,//定時等待TERMINATED; //終止 }創(chuàng)建狀態(tài)(NEW):當一個線程創(chuàng)建以后,就處于創(chuàng)建狀態(tài)。Thread? ?th= new?Thread(()->{ });
等待鎖(BLOCKED):當線程調用 th.start()?方法,表明該線程具備獲取鎖的資格,進入等待鎖的池子中。
可運行狀態(tài):當線程?th?獲取到鎖之后就進入該狀態(tài)(該狀態(tài)并不存在Thread?類中,但是操作系統(tǒng)是否執(zhí)行線程,是根據(jù)是否分配時間片來決定的)。
執(zhí)行態(tài)(RUNNABLE):當可運行態(tài)的線程?th?獲取到cpu的時間片以后就進入執(zhí)行。
終止態(tài)(TERMINATED):線程執(zhí)行完畢,或者出現(xiàn)異常。
阻塞狀態(tài):在?Thread?源碼里沒有改狀態(tài)但是在《操作系統(tǒng)原理》中線程是存在該狀態(tài)的。阻塞態(tài)的線程是沒有釋放自己本身持有的鎖(例如線程運行時需要外部I/O資源,打印機、調用sleep()方法。)只是由于外部提出了干預,等外部事件執(zhí)行完畢后,可直接進入可運行狀態(tài)。
等待狀態(tài)(WAITING): 一個處于運行狀態(tài)的線程還可能調用wait()方法、該方法會使調用的線程釋放對象鎖釋,所以線程將進入等待獲取鎖的隊列里面。join()?方法同理,join()方法底層使用的wait(),只不過Join()方法作用于當前執(zhí)行的線程中。通過調用notify()或notifyAll()這兩個方法來喚醒線程然后進入鎖池狀態(tài)。進入鎖池狀態(tài)以后繼續(xù)參與鎖的競爭。
定時等待狀態(tài)(TIMED_WAITING):調用?帶參數(shù)的wait(long num)?方法。該方法等定時一到自動會喚醒線程然后進入鎖池狀態(tài)。進入鎖池狀態(tài)以后繼續(xù)參與鎖的競爭。
掛起狀態(tài):當一個處于運行狀態(tài)的線程調用了suspend()方法以后,它就會進入掛起狀態(tài)(這一方法已經(jīng)過時不建議使用)。掛起狀態(tài)的線程也沒有釋放對象鎖,它需要調用resume()方法以后才能恢復到可運行狀態(tài)。將線程掛起容易導致程序死鎖。
?
轉載于:https://www.cnblogs.com/jalja/p/11451981.html
總結
以上是生活随笔為你收集整理的java 线程之线程状态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分期乐被冻结怎么解决?分期乐被冻结的解决
- 下一篇: d3.js 教程 模仿echarts柱状