java學習之- 線程繼承Thread類


標簽(空格分隔): 線程


在java。lang包中有個Thread子類,大家可以自行查閱文檔,及范例;

如何在自定義的代碼中,自定義一個線程呢?

1.通過對api的查找,java已經提供了對線程這類事物的描述,就是Thread類,創建線程的第一種方式,就是繼承Thread類:
2.public void run(),如果該線程是使用獨立的Runnable運行對象的run方法,否則該方法不執行任何操作並返回,Thread的子類應該重寫該方法;
3.查看API的時候:查看start方法,使用該線程開始執行,java虛擬機調用該線程的run方法;

class Demo extends Thread{
    pulbic void run(){
        System.out.println("Demo run");
    }
}
class ThreadDemo{
    public static void main(String[] args){
        Demo d=new Demo();
        d.start();
        
    }
}

上述:
創建一個子類的步驟如下:
1.定義類繼承Thread;
2.復寫Thread的run方法;
3.調用線程的start方法,該方法有兩個作用,一個啟動線程,二調用run方法;
4.new一個對象的時候只是創建了一個線程,並未執行,只有調用了start的方法才是被執行了;

如下代碼的分析

package com.wangaling;
class Demo extends Thread{
    public void run(){
        for(int x=0;x<60;x++) {
            System.out.println("demo run-----"+x);
        }
    }
}
class ThreadDemo{

    public static void main(String[] args){
        Demo d= new Demo();//創建好一個線程
        d.start();
        for(int x=0;x<60;x++){
            System.out.println("helloworld!----"+x);
        }
    }
}

執行結果:

demo run-----0
helloworld!----0
demo run-----1
helloworld!----1
demo run-----2
helloworld!----2
demo run-----3
helloworld!----3
helloworld!----4
helloworld!----5
helloworld!----6
demo run-----4
helloworld!----7
demo run-----5
helloworld!----8
demo run-----6
helloworld!----9
demo run-----7
helloworld!----10
demo run-----8
helloworld!----11
demo run-----9
demo run-----10
helloworld!----12
demo run-----11
helloworld!----13
helloworld!----14
demo run-----12
helloworld!----15
demo run-----13
helloworld!----16
demo run-----14
helloworld!----17
demo run-----15
helloworld!----18
demo run-----16
helloworld!----19
demo run-----17
helloworld!----20
helloworld!----21
demo run-----18
helloworld!----22
demo run-----19
helloworld!----23
demo run-----20
helloworld!----24
demo run-----21
helloworld!----25
demo run-----22
helloworld!----26
demo run-----23
helloworld!----27
helloworld!----28
helloworld!----29
helloworld!----30
helloworld!----31
demo run-----24
helloworld!----32
demo run-----25
helloworld!----33
helloworld!----34
demo run-----26
helloworld!----35
demo run-----27
helloworld!----36
demo run-----28
helloworld!----37
helloworld!----38
demo run-----29
helloworld!----39
demo run-----30
helloworld!----40
demo run-----31
demo run-----32
demo run-----33
demo run-----34
demo run-----35
demo run-----36
demo run-----37
demo run-----38
helloworld!----41
demo run-----39
helloworld!----42
demo run-----40
helloworld!----43
demo run-----41
helloworld!----44
demo run-----42
helloworld!----45
helloworld!----46
helloworld!----47
helloworld!----48
helloworld!----49
demo run-----43
helloworld!----50
helloworld!----51
demo run-----44
helloworld!----52
demo run-----45
helloworld!----53
helloworld!----54
helloworld!----55
helloworld!----56
demo run-----46
helloworld!----57
demo run-----47
helloworld!----58
demo run-----48
demo run-----49
demo run-----50
demo run-----51
demo run-----52
demo run-----53
demo run-----54
helloworld!----59
demo run-----55
demo run-----56
demo run-----57
demo run-----58
demo run-----59

Process finished with exit code 0


上述結果產生的分析:
1.main----->d=new demo()產生了一個新的控制單元---->start()開啟新的控制單,執行:demo run;
2.main----->d=new demo()---->start()-->新的控制單元,同時朱函數還要繼續執行:helloworld;
3.以上就開啟一個多線程;
4.ThreadDemo開啟了2個執行路徑:一個是main,一個是d,那么兩個會同時執行嗎?其實是不可能的,Windows是多任務操作系統,你看着電視聽這音樂,看着是同時執行,其實不是的,執行以下電視,執行以下音樂,他在兩個任務之間做了快速切換,你要知道CPU切換的是進程里面的線程,所以到這里大家就會明白為啥任務開的多,反而越慢;
5.目前我們的例子是:一個進程里面有多個線程,多個線程搶奪CPU資源,誰搶到CPU的資源,誰就執行,通過打印看到效果;
6.電腦實現雙核,是不是CPU就可以實現了同時執行,雙核之后內存就是瓶頸;
7.發現運行結果每次都不同:因為多個線程都在獲取CPU的執行使用權,CPU執行到誰,誰就運行明確一點,在某一個時刻,只能有一個程序在運行,當然多核除外,CPU在做着快速的切換,已達到看上去同時執行的效果,我們可以形象的把多線程的運行形容為在互相搶奪CPU的資源或者稱之為執行權,這就是多線程的一個特性,叫隨機性,誰搶到誰執行,至於執行多長時間目前是CPU說的算;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM