<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    多線程

    多線程的概念

    一、程序與進程

    1、程序:一段靜態的代碼。

    2、進程:程序的一次動態執行過程,它對應從代碼加載、執行到執行完畢的一個完整過程。

    3、進程也稱任務,支持多個進程同時執行的OS就被稱為多進程OS或多任務OS。

    二、進程與線程

    在一個程序內部也可以實現多個任務并發執行,其中每個任務稱為線程。

    線程是比進程更小的執行單位,它是在一個進程中獨立的控制流,即程序內部的控制流。

    特點:線程不能獨立運行,必須依賴于進程,在進程中運行。

    每個程序至少有一個線程稱為主線程。

    單線程:只有一條線程的進程稱為單線程

    多線程:有不止一個線程的進程稱為多線程

    三、開啟多線程的優點和缺點

    提高界面程序響應速度。通過使用線程,可以將需要大量時間完成的流程在后臺啟動單獨的線程完成,提高前臺界面的相應速度。

    充分利用系統資源,提高效率。通過在一個程序內部同時執行多個流程,可以充分利用CPU等系統資源,從而最大限度的發揮硬件的性能。

    當程序中的線程數量比較多時,系統將花費大量的時間進行線程的切換,這反而會降低程序的執行效率。但是,相對于優勢來說,劣勢還是很有限的,所以現在的項目開發中,多線程編程技術得到了廣泛的應用。

    多線程實現

    一、在實現線程編程時,首先需要讓一個類具備多線程的能力,繼承Thread類或實現Runnable接口的類具備多線程的能力,然后創建線程對象,調用對應的啟動線程方法即可實現線程編程。

    在一個程序中可以實現多個線程,多線程編程指在同一個程序中啟動了兩個或兩個以上的線程。

    在實際實現線程時,Java語言提供了三種實現方式:

    (1)繼承Thread類

    (2)實現Runnable接口

    (3)使用Timer和TimerTask組合

    二、繼承Thread線程類實現多線程
    java.lang包中提供了一個專門的線程類(Thread),在該類中封裝了許多對線程進行調度和處理的方法。如果一個類繼承了Thread類,則該類就具備了多線程的能力,可以多線程的方式執行。


     1class MyThread extends Thread{
     2public void run(){
     3
     4//線程體
     5}

     6}

     7繼承Thread類實現多線程。
     8MyThread tt1 = new MyThread ();
     9//啟動線程
    10tt1.start();
    11try{
    12for(int i = 0;i < 5;i++){
    13//延時1秒
    14
    15Thread.sleep(1000);
    16System.out.println("Main:" + i);
    17
    18}

    19}
    catch(Exception e){}
    注意:

    線程的特性:隨機性,系統在執行多線程程序時只保證線程是交替執行的,至于哪個線程先執行哪個線程后執行,則無法獲得保證,需要書寫專門的代碼才可以保證執行的順序。

    對于同一個線程類,也可以啟動多個線程

    同一個線程不能啟動兩次,

    當自定義線程中的run方法執行完成以后,則自定義線程自然死亡。而對于系統線程來說,只有當main方法執行結束,而且啟動的其它線程都結束以后,才會結束。當系統線程執行結束以后,程序的執行才真正結束。

    三、 實現Runable接口

    a) 多線程對象實現java.lang.Runnable接口并且在該類中重寫Runnable接口的run方法。

    b) 好處:實現Runable接口的方法避免了單繼承的局限性。

    例1:使用實現Runable接口的方式實現多線程。


    1class MyThread2 implements Runable{
    2public void run(){} //重寫Runable接口中的run()方法
    3}

    4MyThread2 mt1=new MyThread2();
    5Thread t1=new Thread(mt1);
    6t1.start();
    線程的生命周期

    一、線程的生命周期

    線程是一個動態執行的過程,它也有一個從產生到死亡的過程,這就是所謂的生命周期。一個線程在它的生命周期內有5種狀態:

    1、新建(new Thread)

    當創建Thread類的一個實例(對象)時,此線程進入新建狀態(未被啟動)。
    例如:Thread t1=new Thread();

    2、就緒(runnable)

    線程已經被啟動,正在等待被分配給CPU時間片,也就是說此時線程正在就緒隊列中排隊等候得到CPU資源。例如:t1.start();

    3、運行(running)

    線程獲得CPU資源正在執行任務(run()方法),此時除非此線程自動放棄CPU資源或者有優先級更高的線程進入,線程將一直運行到結束。

    4、死亡(dead)

    當線程執行完畢或被其它線程殺死,線程就進入死亡狀態,這時線程不可能再進入就緒狀態等待執行。

    自然終止:正常運行run()方法后終止

    異常終止:調用stop()方法讓一個線程終止運行

    5、堵塞(blocked)

    由于某種原因導致正在運行的線程讓出CPU并暫停自己的執行,即進入堵塞狀態。

    正在睡眠:用sleep(long t) 方法可使線程進入睡眠方式。一個睡眠著的線程在指定的時間過去可進入就緒狀態。

    正在等待:調用wait()方法。(調用motify()方法回到就緒狀態)

    被另一個線程所阻塞:調用suspend()方法。(調用resume()方法恢復)

    posted on 2012-11-16 12:50 skylight 閱讀(197) 評論(0)  編輯  收藏 所屬分類: java


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    <2012年11月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    統計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久不见久久见中文字幕免费| 91情国产l精品国产亚洲区| 亚洲成a人片在线不卡一二三区 | 美女黄网站人色视频免费国产| 久久综合亚洲鲁鲁五月天| 成人免费区一区二区三区| 亚洲毛片不卡av在线播放一区| 亚洲AV永久无码天堂影院| 亚洲成在人线aⅴ免费毛片| 18亚洲男同志videos网站| 97在线免费观看视频| 精品国产亚洲男女在线线电影| 羞羞漫画页面免费入口欢迎你| 国产在线19禁免费观看国产| 亚洲精品中文字幕无码A片老| 中文字幕av无码无卡免费| 亚洲成AV人综合在线观看 | 亚洲精品无码成人片久久| yellow免费网站| 亚洲国产av一区二区三区| 深夜A级毛片视频免费| 亚洲AV无码一区二区三区在线观看 | 四色在线精品免费观看| 一本色道久久88亚洲精品综合| 久久免费看黄a级毛片| 亚洲理论片在线观看| 亚洲免费观看在线视频| 亚洲同性男gay网站在线观看| 18女人腿打开无遮掩免费| 亚洲成人黄色在线观看| 免费国产成人高清在线观看网站| 亚洲无线一二三四区| 久久久久久免费视频| 亚洲性色AV日韩在线观看| 青青青青青青久久久免费观看| 国产AV无码专区亚洲AV麻豆丫 | 亚洲精品久久无码| 国产精品四虎在线观看免费| 国产尤物在线视精品在亚洲| 亚洲国产精品第一区二区三区| GOGOGO高清免费看韩国|