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

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

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

    我思故我強

    java多線程_創建線程的兩種方式

     一、什么是線程

    線程是一個程序內部的順序控制流。

    線程和進程

    1.進程:每個進程都有獨立的代碼和數據空間,進程切換開銷大。

    2.線程:輕量的進程,同一個線程共享代碼和數據空間,每個線程有獨立運行的棧和程序計數器(PC),線程切換的開銷小。

    3.在操作系統中能同時運行多個任務(程序)。

    4.在同一應用程序有多個順序流同時執行。


    問題:對于單核的CPU,處理多個任務時。并不會同時真正的運兩個以上的程序。那么它是怎樣做到處理多任務的呢?

    解答:實際上是操作系統負責對處理器就是CPU等資源進行分配組織和管理。實際上每一時刻只能做一件事,或者運行某一個程序。由于在操作系統的管理下,CPU的處理功能被以非常小的時間間隔進行劃分、進行交替,每一個小的時間間隔我們稱為時間片。當時間片到期之后將去執行下一個程序。由于交替的速度非常的快,這樣就給人一種同時運行多個應用程序或者同時做多件事的一種感覺。這種情況我們稱為并發執行。也就是假的,模擬的,通過快速的交替,表現成在同時做多件事。


    并行執行才是真正意義上的同一時刻做多個事情,同一個瞬間運行不同的應用程序。這樣就要求有多個CPU。支持程序并發運行的操作系統我們稱為多任務的操作系統或者說是多進程的操作系統。


    并發性的工作原理還可以應用在更高的層面上,我們可以在一個應用程序的內部,把它要完成的任務分解為多個更小的子任務以多條齊頭并進的線索來并發的執行,這種就稱為線程或多線程。


    二、線程的概念模型

    Java語言實現或支持多線程的工作方式。

    一個線程必須具備以下三方面的要素才能正常的工作。

    1.虛擬的CPU,由java.lang.Thread類封裝和虛擬。

    2.CPU所執行的代碼,傳遞給Thread類的對象。

    3.CPU所處理的數據,傳遞給Thread類的對象。

     

     

    三、創建線程

    第一種方式:使用Runnable接口創建線程


    1.Java的線程是通過java.lang.Thread類來實現。

    2.每個線程都是通過某個特定的Thread對象所對應的run()方法來完成其操作。方法run()稱為線程體。

    例1:

    public class Thread1{

    public static void main(String[] args){

    Runner1 r=new Runner1();//2.創建實現Runnable接口的對象

    Thread t=new Thread(r); //3.創建一個Thread類的對象

    t.start(); //4.啟動線程

    }


    }

    class Runner1 implements Runnable{//1.Runner1實現Runnable接口

    public void run(){

    for(int i=1;i<20;i++){

         System.out.println(i);

    }

    }    

    }

    程序運行的結果是輸出1到19個數字。與在main()方法中直接寫for循環是一樣的效果。

    但實現的原理不一樣。

    使用線程輸出的有兩個線程(main()主線程和t子線程),不使用只有一個線程。

    創建線程的三個步驟

    1.定義一個類實現Runnable接口,重寫接口中的run()方法。在run()方法中加入具體的任務代碼或處理邏輯。

    2.創建Runnable接口實現類的對象。

    3.創建一個Thread類的對象,需要封裝前面Runnable接口實現類的對象。(接口可以實現多繼承)

    4.調用Thread對象的start()方法,啟動線程

    第二種方式:直接繼承Thread類創建對象


    例2:

    public class Thread2{

    public static void main(String[] args){

    Thread t=new Runner2();

    t.start();

    }


    }

    class Runner2 extends Thread{

    public void run(){

    for(int i=1;i<20;i++){

    String s=Thread.currentThread().getName();

         System.out.println(s+":"+i);

    }

    }    

    }

    1.首先定義一個類去繼承Thread父類,此時Runner2類并沒有直接的實現Runnable接口,但其實Thread類在JDK中已經實現了Runnable接口。這樣就Runner2類間接的實現了Runnable接口。重寫父類中的run()方法。在run()方法中加入具體的任務代碼或處理邏輯。


    2.直接創建一個Runner2類的對象,也可以利用多態性,變量t聲明為父類的類型。

    3.線程t啟動,隱含的調用run()方法。

    比較兩種方式:

    a.使用Runnable接口創建線程

    1.可以將CPU,代碼和數據分開,形成清晰的模型

    2.線程體run()方法所在的類可以從其它類中繼承一些有用的屬性和方法

    3.有利于保持程序的設計風格一致

    b.直接繼承Thread類創建對象

    1.Thread子類無法再從其它類繼承(java語言的單繼承)。

    2.編寫簡單,run()方法的當前對象就是線程對象,可直接操作。

     

    posted on 2009-10-14 17:10 李云澤 閱讀(1080) 評論(0)  編輯  收藏 所屬分類: 面試筆試相關的

    主站蜘蛛池模板: 免费一级毛片女人图片| 免费在线看v网址| 免费人成在线观看网站视频| 亚洲日韩中文字幕无码一区| 国产免费久久精品99re丫y| 亚洲sss综合天堂久久久| 最近最好的中文字幕2019免费| 亚洲人成网站在线观看播放动漫| 成人黄色免费网站| 亚洲日韩国产欧美一区二区三区| 久久精品无码一区二区三区免费| 亚洲AV无码无限在线观看不卡| 免费日韩在线视频| 亚美影视免费在线观看| 日韩亚洲欧洲在线com91tv| 日本在线免费播放| 亚洲制服在线观看| 国产精品四虎在线观看免费| 无码精品人妻一区二区三区免费| 亚洲欧洲自拍拍偷午夜色无码| 国产婷婷成人久久Av免费高清| 亚洲日本在线播放| 色吊丝永久在线观看最新免费| 黄色网页免费观看| 亚洲国产精品久久久久婷婷软件 | 日韩精品无码专区免费播放| 免费人成视频在线观看视频| xxxxx做受大片在线观看免费| 亚洲国产一二三精品无码| 99久久精品免费精品国产| 亚洲人成未满十八禁网站| 亚洲国产免费综合| 久久中文字幕免费视频| 亚洲视频在线观看网站| 高清在线亚洲精品国产二区| 在线观看肉片AV网站免费| 亚洲熟妇少妇任你躁在线观看| 亚洲无码视频在线| 最新欧洲大片免费在线| 本道天堂成在人线av无码免费| 亚洲成综合人影院在院播放|