Android開發筆記——線程的start和run方法

來源:互聯網
上載者:User

    線程在java開發中是一個很重要的概念,今天在寫安卓程式時要添加線程,用到了run()、start()方法,一下子蒙了,把倆方法搞混淆了,印象中感覺效果是一樣的,趕快往回查查書和之前學java基礎時寫過的程式才明白過來。

   之所以出現線程,就是為了更好的利用CPU,讓她更加“精明”的幹活。
程式通過調用Thread類的start()方法來啟動一個線程,這時此線程是處於就緒狀態,並沒有運行。然後通過此Thread類調用方法run()來完成其運行操作的,這裡方法run()稱為線程體,它包含了要執行的這個線程的內容,Run方法運行結束,此線程終止,而CPU再運行其它線程,而如果直接用Run方法,這隻是調用一個方法而已,程式中依然只有主線程--這一個線程,其程式執行路徑還是只有一條,這樣就沒有達到寫線程的目的。下面是一小段程式例子:public class TestThread1{ public static void main(String[] args){ Runner1 r=new Runner1(); //r.run();//這是方法調用,而不是開啟一個線程 Thread t=new Thread(r);//調用了Thread(Runnable target)方法。且父類物件變數指向子類對象。 t.start(); for(int i=0;i<100;i++){ System.out.println("進入Main Thread運行狀態"); System.out.println(i); } }}class Runner1 implements Runnable{ //實現了這個介面,jdk就知道這個類是一個線程 public void run(){ for(int i=0;i<100;i++){ System.out.println("進入Runner1運行狀態"); System.out.println(i); } }}

    Thread對象的run()方法在一種迴圈下,使線程一直運行,直到不滿足條件為止,在你的main()裡建立並運行了一些線程,調用Thread類的start()方法將為線程執行特殊的初始化的過程,來配置線程,然後由線程執行機制調用run()。如果你不調用start()線程就不會啟動。

    因為線程調度機制的行為是不確定的,所以每次運行該程式都會有不同的結果,你可以把你的迴圈次數增多些,然後看看執行的結果,你會發現main()的線程和Thread1是交替啟動並執行。
    還有就是儘管線程的調度順序是不固定的,但是如果有很多線程被阻塞等待運行,發送器將會讓優先順序高的線程先執行,而優先順序低的線程執行的頻率會低一些。

    線程的啟動是比較複雜的,需要為線程分配資源,它的START方法被調用時系統才會為線程分配資源。
    上面調用線程的run方法只能算普通的方法調用一樣,得運行完run裡面的代碼整個程式才能往下進行,而如果調用start方法,線程和MAIN方法就會搶資源,列印的語句會交替出現,把線程裡的迴圈次數加到300,試一下依次調run、start和兩次都調start方法時所出現的情況應該能看出點端倪~~~

 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.