Java多執行緒程式設計要點 (一)
1、 認識Thread和Runnable
Java中實現多執行緒有兩種途徑:繼承Thread類或者實現Runnable介面。Runnable是介面,建議用介面的方式生成執行緒,因為介面可以實現多繼承,況且Runnable只有一個run方法,很適合繼承。在使用Thread的時候只需繼承Thread,並且new一個例項出來,呼叫start()方法即可以啟動一個執行緒。
Thread Test = new Thread();
Test.start();
在使用Runnable的時候需要先new一個實現Runnable的例項,之後啟動Thread即可。
Test impelements Runnable;
Test t = new Test();
Thread test = new Thread(t);
test.start();
總結:Thread和Runnable是實現java多執行緒的2種方式,runable是介面,thread是類,建議使用runable實現java多執行緒,不管如何,最終都需要通過thread.start()來使執行緒處於可執行狀態。
2、 認識Thread的start和run
1) start:
用start方法來啟動執行緒,真正實現了多執行緒執行,這時無需等待run方法體程式碼執行完畢而直接繼續執行下面的程式碼。通過呼叫Thread類的start()方法來啟動一個執行緒,這時此執行緒處於就緒(可執行)狀態,並沒有執行,一旦得到spu時間片,就開始執行run()方法,這裡方法run()稱為執行緒體,它包含了要執行的這個執行緒的內容,Run方法執行結束,此執行緒隨即終止。
2) run:
run()方法只是類的一個普通方法而已,如果直接呼叫Run方法,程式中依然只有主執行緒這一個執行緒,其程式執行路徑還是隻有一條,還是要順序執行,還是要等待run方法體執行完畢後才可繼續執行下面的程式碼,這樣就沒有達到寫執行緒的目的。
總結:呼叫start方法方可啟動執行緒,而run方法只是thread的一個普通方法呼叫,還是在主執行緒裡執行。
3、 執行緒狀態說明
執行緒狀態從大的方面來說,可歸結為:初始狀態、可執行狀態、不可執行狀態和消亡狀態,具體可細分為上圖所示7個狀態,說明如下:
1) 執行緒的實現有兩種方式,一是繼承Thread類,二是實現Runnable介面,但不管怎樣,當我們new了thread例項後,執行緒就進入了初始狀態;
2) 當該物件呼叫了start()方法,就進入可執行狀態;
3) 進入可執行狀態後,當該物件被作業系統選中,獲得CPU時間片就會進入執行狀態;
4) 進入執行狀態後case就比較多,大致有如下情形:
﹒run()方法或main()方法結束後,執行緒就進入終止狀態;
﹒當執行緒呼叫了自身的sleep()方法或其他執行緒的join()方法,就會進入阻塞狀態(該狀態既停止當前執行緒,但並不釋放所佔有的資源)。當sleep()結束或join()結束後,該執行緒進入可執行狀態,繼續等待OS分配時間片;
﹒當執行緒剛進入可執行狀態(注意,還沒執行),發現將要呼叫的資源被鎖牢(synchroniza,lock),將會立即進入鎖池狀態,等待獲取鎖標記(這時的鎖池裡也許已經有了其他執行緒在等待獲取鎖標記,這時它們處於佇列狀態,既先到先得),一旦執行緒獲得鎖標記後,就轉入可執行狀態,等待OS分配CPU時間片;
﹒當執行緒呼叫wait()方法後會進入等待佇列(進入這個狀態會釋放所佔有的所有資源,與阻塞狀態不同),進入這個狀態後,是不能自動喚醒的,必須依靠其他執行緒呼叫notify()或notifyAll()方法才能被喚醒(由於notify()只是喚醒一個執行緒,但我們由不能確定具體喚醒的是哪一個執行緒,也許我們需要喚醒的執行緒不能夠被喚醒,因此在實際使用時,一般都用notifyAll()方法,喚醒有所執行緒),執行緒被喚醒後會進入鎖池,等待獲取鎖標記。
﹒當執行緒呼叫stop方法,即可使執行緒進入消亡狀態,但是由於stop方法是不安全的,不鼓勵使用,大家可以通過run方法裡的條件變通實現執行緒的stop。
相關文章
- Java多執行緒程式設計要點Java執行緒程式設計
- Java 多執行緒程式設計要點(synchronized)Java執行緒程式設計synchronized
- Java多執行緒程式設計——進階篇一Java執行緒程式設計
- Java多執行緒程式設計基礎Java執行緒程式設計
- 程式設計思想之多執行緒與多程式(3):Java 中的多執行緒程式設計執行緒Java
- 多執行緒程式設計執行緒程式設計
- java執行緒程式設計(一):執行緒基礎(轉)Java執行緒程式設計
- 多執行緒程式設計基礎(一)-- 執行緒的使用執行緒程式設計
- Java多執行緒程式設計—鎖優化Java執行緒程式設計優化
- Java-基礎程式設計-多執行緒Java程式設計執行緒
- java多執行緒程式設計--基礎篇Java執行緒程式設計
- Java多執行緒程式設計入門(轉)Java執行緒程式設計
- 使用Java實現多執行緒程式設計Java執行緒程式設計
- Java多執行緒與併發程式設計總結(一)Java執行緒程式設計
- 多執行緒程式設計總結:一、認識多執行緒本質執行緒程式設計
- JavaScript多執行緒程式設計JavaScript執行緒程式設計
- Boost多執行緒程式設計執行緒程式設計
- UNIX多執行緒程式設計執行緒程式設計
- 多執行緒程式設計(轉)執行緒程式設計
- java多執行緒程式設計chap5-7Java執行緒程式設計
- java多執行緒程式設計chap1-2Java執行緒程式設計
- java多執行緒程式設計chap3-4Java執行緒程式設計
- Java多執行緒程式設計之同步器Java執行緒程式設計
- Java多執行緒程式設計——進階篇二Java執行緒程式設計
- 深入淺出Java多執行緒程式設計(轉)Java執行緒程式設計
- 淺析Java多執行緒程式設計機制Java執行緒程式設計
- .NET多執行緒程式設計(1):多工和多執行緒 (轉)執行緒程式設計
- Java多執行緒設計模式(1)Java執行緒設計模式
- Java 面試必會知識點:Java 多執行緒與併發程式設計Java面試執行緒程式設計
- java多執行緒程式設計:你真的瞭解執行緒中斷嗎?Java執行緒程式設計
- 好程式設計師Java培訓分享Java多執行緒程式設計師Java執行緒
- Java實驗五: Java多執行緒程式設計(頭歌)Java執行緒程式設計
- Linux多執行緒程式設計———重點區分Linux執行緒程式設計
- 多執行緒程式設計的基礎知識點執行緒程式設計
- 使用執行緒池優化多執行緒程式設計執行緒優化程式設計
- iOS多執行緒程式設計:執行緒同步總結iOS執行緒程式設計
- .NET多執行緒程式設計(3):執行緒同步 (轉)執行緒程式設計
- [短文速讀 -5] 多執行緒程式設計引子:程式、執行緒、執行緒安全執行緒程式設計