1. 程式人生 > >JAVA多執行緒(一)

JAVA多執行緒(一)

要想了解多執行緒,首先需要了解一下多執行緒的基礎知識,如多執行緒生命週期

多執行緒的週期大體上分為五個,NEW,RUNNABLE,RUNNING,BLOCKED,TERMINATED.

在這裡我們首先,先想一個問題,是否執行緒.start之後,該執行緒就執行了呢?

  1. NEW(新建狀態):這裡如果沒有.start,此時的執行緒根本不存在,跟普通的建立一個物件沒有什麼區別.通過.start進入RUNNABLE狀態
  2. RUNNABLE(等待狀態):在這裡我們來回答一下前面所說的呼叫start之後時候執行緒就執行的問題,答案是否定的,因為所有的執行緒都需要CPU來排程.在這種狀態下,不管你呼叫的sleep,wait等都需要CPU排程,所有此狀態只能是意外終止或者是進入RUNNING狀態.
  3. RUNNING(執行狀態):在此狀態其實也可以稱為RUNNABLE,反過來的話此說法就不成立.來說一下在此狀態轉化到別的狀態的方法.                                                                                                                                                                                           進入TERMINATED狀態:                                                                                                                                                                       * 只能用JDK8已經不推薦用的stop的方法,或者是通過某個標識來跳到此狀態中.                                                         進入BLOCKED狀態中:                                                                                                                                                                         *可以用sleep,wait進入waitSet佇列中等待.*IO流阻塞,如網路讀寫.*或者因為需要獲取某種鎖資源而進入                                 BLOCKED狀態中.   

                                                                                                                                                        進入RUNNABLE狀態:                                                                                                                                                                          *CPU排程輪詢使該執行緒放棄執行,*執行緒主動呼叫yield方法,放棄CPU執行權
       

  4. BLOCKED(阻塞狀態):                                                                                                                                                                    進入TERMINATED狀態:                                                                                                                                                                         *呼叫JDK不推薦使用的stop方法或者意外死亡                                                                                                            進入RUNNABLE狀態:                                                                                                                                                                           *執行緒阻塞的操作結束,比如讀取了想要的資料                                                                                                                           *執行緒完成了指定的休眠                                                                                                                                                             *Wait中的執行緒被其他執行緒notify/notifyall喚醒                                                                                                                         *執行緒獲取到了想要的鎖資源                                                                                                                                                     *執行緒在阻塞的過程中被打斷,比如其他執行緒呼叫了interrupt方法

  5. TERMINATED(終止狀態):該狀態是執行緒最終狀態,所以不會切換到其他任何狀態中,執行緒進入TERMINATED狀態中,意味這執行緒結束.                                                                                                                                                                                             進入TERMINATED狀態:                                                                                                                                                                       *正常執行結束                                                                                                                                                                           *意外結束