一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Thread的run()與start()的區(qū)別

 QCamera 2015-06-02

java的線程是通過java.lang.Thread類來實現(xiàn)的。VM啟動時會有一個由主方法所定義的線程。可以通過創(chuàng)建Thread的實例來創(chuàng)建新的線程。每個線程都是通過某個特定Thread對象所對應的方法run()來完成其操作的,方法run()稱為線程體。通過調(diào)用Thread類的start()方法來啟動一個線程。


在Java當中,線程通常都有五種狀態(tài),創(chuàng)建、就緒、運行、阻塞和死亡。
  第一是創(chuàng)建狀態(tài)。在生成線程對象,并沒有調(diào)用該對象的start方法,這是線程處于創(chuàng)建狀態(tài)。
  第二是就緒狀態(tài)。當調(diào)用了線程對象的start方法之后,該線程就進入了就緒狀態(tài),但是此時線程調(diào)度程序還沒有把該線程設置為當前線程,此時處于就緒狀態(tài)。在線程運行之后,從等待或者睡眠中回來之后,也會處于就緒狀態(tài)。
  第三是運行狀態(tài)。線程調(diào)度程序?qū)⑻幱诰途w狀態(tài)的線程設置為當前線程,此時線程就進入了運行狀態(tài),開始運行run函數(shù)當中的代碼。
  第四是阻塞狀態(tài)。線程正在運行的時候,被暫停,通常是為了等待某個時間的發(fā)生(比如說某項資源就緒)之后再繼續(xù)運行。sleep,suspend,wait等方法都可以導致線程阻塞。
  第五是死亡狀態(tài)。如果一個線程的run方法執(zhí)行結(jié)束或者調(diào)用stop方法后,該線程就會死亡。對于已經(jīng)死亡的線程,無法再使用start方法令其進入就緒。

實現(xiàn)并啟動線程有兩種方法
1、寫一個類繼承自Thread類,重寫run方法。用start方法啟動線程
2、寫一個類實現(xiàn)Runnable接口,實現(xiàn)run方法。用new Thread(Runnable target).start()方法來啟動

多線程原理:相當于玩游戲機,只有一個游戲機(cpu),可是有很多人要玩,于是,start是排隊!等CPU選中你就是輪到你,你就run(),當CPU的運行的時間片執(zhí)行完,這個線程就繼續(xù)排隊,等待下一次的run()。

調(diào)用start()后,線程會被放到等待隊列,等待CPU調(diào)度,并不一定要馬上開始執(zhí)行,只是將這個線程置于可動行狀態(tài)。然后通過JVM,線程Thread會調(diào)用run()方法,執(zhí)行本線程的線程體。先調(diào)用start后調(diào)用run,這么麻煩,為了不直接調(diào)用run?就是為了實現(xiàn)多線程的優(yōu)點,沒這個start不行。

1.start()方法來啟動線程,真正實現(xiàn)了多線程運行。這時無需等待run方法體代碼執(zhí)行完畢,可以直接繼續(xù)執(zhí)行下面的代碼;通過調(diào)用Thread類的start()方法來啟動一個線程, 這時此線程是處于就緒狀態(tài), 并沒有運行。 然后通過此Thread類調(diào)用方法run()來完成其運行操作的, 這里方法run()稱為線程體,它包含了要執(zhí)行的這個線程的內(nèi)容, Run方法運行結(jié)束, 此線程終止。然后CPU再調(diào)度其它線程。
2.run()方法當作普通方法的方式調(diào)用。程序還是要順序執(zhí)行,要等待run方法體執(zhí)行完畢后,才可繼續(xù)執(zhí)行下面的代碼; 程序中只有主線程——這一個線程, 其程序執(zhí)行路徑還是只有一條, 這樣就沒有達到寫線程的目的。

記?。?strong>多線程就是分時利用CPU,宏觀上讓所有線程一起執(zhí)行 ,也叫并發(fā)

  1. public class Test {  
  2.     public static void main(String[] args) {  
  3.         Runner1 runner1 = new Runner1();  
  4.         Runner2 runner2 = new Runner2();  
  5. //      Thread(Runnable target) 分配新的 Thread 對象。  
  6.         Thread thread1 = new Thread(runner1);  
  7.         Thread thread2 = new Thread(runner2);  
  8. //      thread1.start();  
  9. //      thread2.start();  
  10.         thread1.run();  
  11.         thread2.run();  
  12.     }  
  13. }  
  14.   
  15. class Runner1 implements Runnable { // 實現(xiàn)了Runnable接口,jdk就知道這個類是一個線程  
  16.     public void run() {  
  17.         for (int i = 0; i < 100; i++) {  
  18.             System.out.println("進入Runner1運行狀態(tài)——————————" + i);  
  19.         }  
  20.     }  
  21. }  
  22.   
  23. class Runner2 implements Runnable { // 實現(xiàn)了Runnable接口,jdk就知道這個類是一個線程  
  24.     public void run() {  
  25.         for (int i = 0; i < 100; i++) {  
  26.             System.out.println("進入Runner2運行狀態(tài)==========" + i);  
  27.         }  
  28.     }  
  29. }  

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    好吊色欧美一区二区三区顽频| 欧洲偷拍视频中文字幕| 日韩欧美综合在线播放| 国产精品偷拍一区二区| 日本一二三区不卡免费| 日本不卡在线一区二区三区| 日本在线高清精品人妻| 欧美午夜视频免费观看| 国产目拍亚洲精品区一区| 丰满的人妻一区二区三区| 国产精品免费视频专区| 久久国产亚洲精品赲碰热| 黄色av尤物白丝在线播放网址| 国产精品偷拍视频一区| 日韩人妻一区二区欧美| 91亚洲国产日韩在线| 国产又色又爽又黄又免费 | 欧美国产极品一区二区| 国产精品午夜福利免费在线| 国产一区二区三区草莓av| 欧美亚洲另类久久久精品| 成人精品视频一区二区在线观看| 日本人妻免费一区二区三区| 丰满少妇被猛烈插入在线观看| 国产一二三区不卡视频| 东京热男人的天堂久久综合| 亚洲高清中文字幕一区二三区 | 一区二区欧美另类稀缺| 日本免费一区二区三女| 精品熟女少妇av免费久久野外 | 欧美午夜性刺激在线观看| 91亚洲精品国产一区| 亚洲视频一区自拍偷拍另类| 麻豆视传媒短视频免费观看| 99久久精品视频一区二区| 日韩一区二区三区观看| 色婷婷国产精品视频一区二区保健| 欧美日韩久久精品一区二区| 最新69国产精品视频| 久久热九九这里只有精品| 中国一区二区三区人妻|