前兩章講解了線程同步的問題以及對火車票數量異常進行了分析。我相信,在閱讀過程當中,沒有多線程基礎的同窗確定是懵逼的,這些鎖鎖鎖究竟是個什麼東西呀?繼續往下閱讀,你就會知道鎖就不是個東西。java
前面章節已經說了,要實現線程的同步,就得使用鎖。在瞭解鎖前,咱們先對線程的狀態作一個認識。java的線程有六大狀態:NEW(新建)、RUNNABLE(運行)、BLOCKED(阻塞)、TIMED_WAITING(超時等待)、WAITING(等待)、TERMINATED(終止、結束)多線程
NEW(新建): 建立一個線程對象,此刻該對象就處於新建狀態線程
RUNNABLE(運行): 調用start()方法後,進入該狀態。該狀態分爲兩部分,一部分是就緒狀態(ready),一部分是運行狀態(running)。就緒狀態是說線程得到了鎖而且處於就緒隊列中,此時線程在等待cpu的資源進行調用。運行狀態是線程得到了cpu資源,已經開始運行cdn
BLOCKED(阻塞): 當線程運行到synchronized修飾的方法或者代碼塊進行鎖的競爭,而沒有得到鎖時就會進去阻塞狀態對象
TIMED_WAITING(超時等待): 調用wait(long timeout)方法,即在指定時間內等待其它線程發起信號隊列
WAITING(等待): 調用()方法,若是其它線程不發起信號,那麼該線程將一直等待資源
TERMINATED(終止、結束): 線程執行完畢同步
以上就是線程的六種狀態。這六種狀態中,某些狀態的互相轉換將在之後進行講解。 it