android-Thread的run方法和start方法

http://blog.csdn.net/zhou6162/article/details/7108187
解說的很精闢,學習一下:Thread的run方法和start方法

1
線程的概念:線程的起動並不是簡單的調用了RUN方法,而是由一個線程調度器來分別調用所有線程的RUN方法,
我們普通的RUN方法如果沒有執行完是不會返回的,也就是會一直執行下去,這樣RUN方法下面的方法就不可能會執行了,可是線程裏的RUN方法卻不一樣,它只有一定的CPU時間,執行過後就給別的線程了,這樣反覆的把CPU的時間切來切去,因爲切換的速度很快,所以我們就感覺是很多線程在同時運行一樣.

簡單的調用run方法是沒有這樣效果的,所以必須調用Thread類的start方法來啓動線程.所以啓動線程有兩種方法
一是寫一個類繼承自Thread類,然後重寫裏面的run方法,用start方法啓動線程
二是寫一個類實現Runnable接口,實現裏面的run方法,用new Thread(Runnable target).start()方法來啓動

這兩種方法都必須實現RUN方法,這樣線程起動的時候,線程管理器好去調用RUN方法.

2
“老師給我們講課的時候舉過一個例子,就相當於玩遊戲機,只有一個遊戲機(cpu),可是有很多人要玩,於是,start是排隊!等輪到你了,就run()了,當cpu的運行的時間片要到的時候,這個線程就繼續排隊,等待下一次的run()”

“準確來說,不應該是排隊,而應該是老師(JVM)看中誰

另外還有一個狀態,就是

你玩的時候你老媽來叫你吃飯了,於是這個時候你就只好離開,老師繼續找其他人來玩~那麼你這個時候的狀態叫做阻塞狀態。
當你吃飯玩了後又回來繼續玩,這個時候你就又得重新讓老師看中你。。。”

3
之所以出現線程,就是爲了更好的利用CPU,讓她更加“精明”的幹活。 

通過調用Thread類的start()方法來啓動一個線程, 這時此線程是處於就緒狀態, 並沒有運行。 
然後通過此Thread類調用方法run()來完成其運行操作的,
 
這裏方法run()稱爲線程體, 它包含了要執行的這個線程的內容, 
Run方法運行結束, 此線程終止, 而CPU再運行其它線程, 

而如果直接用Run方法, 
這只是調用一個方法而已, 
程序中依然只有主線程--這一個線程, 
其程序執行路徑還是隻有一條, 
這樣就沒有達到寫線程的目的。 

記住:線程就是爲了更好地利用CPU, 
提高程序運行速率的!

class OneThread extends Thread {
public void run(){
}

public class MainApp {

   public static void main(String[] args){

         OneThread ot = new OneThread();

        //ot.run(); //就相當於調用一個ot中的方法,不會創建新的線程

       ot.start();//創建新的線程,並且調用run方法
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章