介紹Thread線程的狀態之前,必須要講解CPU執行線程的隨機性:
例如:有五個線程,CPU中央處理器,在執行這五個線程的時候,有可能先執行Thread-0,有可能先執行Thread-3,等等,都有可能
有可能執行到Thread-2 執行了一半,然后又去執行Thread-1了,等等,都有可能
....
意思就是:Thread-0/Thread-1/Thread-2/Thread-3,都已經.start();了,那Thread-0/Thread-1/Thread-2/Thread-3 都有CPU執行資格,但是這些線程CPU執行權不一定有。
最簡單的Thread運行狀態:
完整的Thread運行狀態:
1.當start(); 后有可能馬上就是運行狀態(具備CPU執行權),也有可能是臨時阻塞狀態(不具備CPU執行權)
2.例如:有兩個線程 Thread-0 / Thread-1 / Thread-2,當Thread-1被CPU執行(代表具備CPU執行權) 這個時候Thread-0/Thread-2(臨時阻塞狀態 不具備CPU執行權)
3.線程的結束,在之前早期的Java版本,是可以.stop(); 結束線程的,但是這種方式Java的設計者們認為不安全,所以被過時了,目前結束線程的方式是 run方法執行結束就代表線程結束
4.關於凍結狀態:sleep(5000) 就會凍結5秒,凍結的時候,沒有CPU執行資格 更沒有CPU執行權,5秒過后就有可能回到臨時阻塞狀態,也有可能回到運行狀態
5.關於凍結狀態:wait();后 會一直處於凍結狀態,自己沒法回到 運行狀態/臨時阻塞狀態,需要調用notify(); , 注意:還有一個方法 notifyAll(); 喚醒全部