全國咨詢/投訴熱線:400-618-9090

首頁技術文章正文

Java基礎教程:多線程(2)-----創建線程的第一種方式

創建時間:2017-11-14 16:31:29.0 來源:黑馬程序員

在Java中,實現多線程操作有兩種方式,一種是繼承java.lang包下的Thread類,覆寫Thread類的run()方法,在run()方法中實現運行在線程上的代碼。另一種就是實現java.lang.Runnable接口,同樣是在run()方法中實現運行在線程上的代碼。兩種方式的區別在于,繼承Thread類可以直接啟動線程,實現Runnable接口不能直接啟動線程,需要先創建Thread類的實例對象,通過Thread類的構造方法傳入實現了Runnable接口的實例對象,然后通過Thread類來啟動線程。因此,這兩種方式都會用到Thread類,由此可見該類在多線程中的重要性,接下來就通過一些實例針對Java中多線程的兩種創建方式分別進行講解,并比較它們的優缺點。

創建線程的第一種方式----繼承Thread類,代碼如下所示:

public class Example02 {
    publicstatic void main(String[] args) {
        Clientt2=new Client();
        t2.start();
        while(true) {
            System.out.println(Thread.currentThread().getName()
            +"................... Client2 is running");
        }
    }
}
class Client extends Thread {
    publicvoid run() {
        while(true) {
            System.out.println(Thread.currentThread().getName()
            + "...................Client1 isrunning");
        }
    }
}

例程中,Client類繼承了Thread類,也就具有了Thread類的全部特點,在main()方法中創建Client的實例對象,并調用從Thread類繼承的start()方法開啟線程,兩個while循環處的代碼交替運行。為了方便看出哪個線程正在運行,可以通過Thread.currentThread().getName()方法獲得當前線程的名稱,默認情況下,主線程的名稱為main,用戶啟動的多條線程的名稱依次為Thread-0、Thread-1、Thread-2……Thread-n等。接下來通過單線程和多線程運行的流程圖來說明它們的區別,如下圖所示。

從圖中可知,單線程中,main()方法必須等到Client的print()方法返回后才能繼續運行,而在多線程中,main()方法和Client的run()方法運行在各自的線程中,互不影響。這就好比一個1G的CPU分成了兩個500M的CPU,在一個CPU上運行main()方法,另一個CPU上運行Client的run()方法。

大家可能會有這樣的疑問:程序沒有直接調用Client對象的run()方法,而是調用了該對象從Thread類繼承來的start()方法,那為什么會執行run()方法呢? 這是因為start()方法有兩個作用,一是開啟一個新的線程,二是調用Thread子類對象的run()方法。如果直接調用線程對象的run()方法,線程對象只是一個普通類的實例對象,新的線程并沒有開啟,run()方法中的代碼也只會在主線程中執行。

友情提示:獲得更多學科學習視頻+資料+源碼,請加QQ:2632311208。


本文版權歸黑馬程序員JavaEE學院所有,歡迎轉載,轉載請注明作者出處。謝謝!


作者:黑馬程序員JavaEE培訓學院


首發:http://java.itheima.com/

相關推薦:
在線咨詢 我要報名

时时开奖结果怎样自动发到qq群