【多線程】一、多線程快速入門

目錄

一、進程與線程的區別

二、爲什麼要使用多線程?

三、常見創建線程的方式

3.1、繼承Thread類

3.2、實現Runnable接口

3.3、匿名內部類

3.4、匿名內部類(Lambda創建)

四、啓動線程方式以及優先級


多線程相信大家可能有一定的認知與瞭解,比方說百度雲下小視頻,或者迅雷下種子,一次性能開啓多個任務,這就是一個典型的多線程。

一、進程與線程的區別

比如電腦運行應用程序的例子,打開QQ,這就是一個進程,我們在任務管理器(按Ctrl+Alt+.)進入點擊任務管理器。可以看到,如圖,總而言之:進程是所有線程的集合,每一個線程是進程中的一條執行路徑。

二、爲什麼要使用多線程?

舉個例子:這個時候有個小姐姐要去樓下拿快遞,但是她有20個快遞要拿,假設一次拿五個快遞,她就需要拿四次,但是這時小何出現了,和小姐姐一起去拿快遞,這時就只需要兩次即可完成!如圖:

從中我們得出了一個結論:小何是個直男,不會陪小姐姐一起休息照顧她。當然不是這樣。多線程之間互不干涉,互不影

響,即便是線程A掛掉,線程B也會繼續運行,這就是爲什麼需要使用多線程。那麼常見的應用場景當然就是羣發短信了,比如

公司要給十萬用戶發短信,不可能一個線程一次一次的發送,這樣效率太慢了,這次就需要用到多線程去處理!來提高效率!

三、常見創建線程的方式

這是一道面試時常見的問題。我們一般會說有兩種,其實是有三種,當然四種也行,嚴格意義上來說只有三種。那麼爲什

麼小何說能有四種呢?請聽小何一一道來!

3.1、繼承Thread類

當然繼承類使用的比較少,原因相信大家都知道,類只能繼承一個,接口可以實現多個。

class AThread extends Thread {
    public void run() { System.out.println("Hello Word? No!IS Hello Thread!!!"); }
}
public class A {
    public static void main(String[] args) { new AThread().start(); }
}

打印結果爲: 

3.2、實現Runnable接口

 實現接口是常用的,對比繼承Thread,優勢多在還能繼承一個類。

當然實現接口是沒有start方法的,只能直接調用run方法,那麼就不是一個新的線程了,所以我們在這裏new出一個線程把

BThread放入然後再調用線程的start方法。

注意:啓動一個線程 是調用start方法 不是run方法。 調用run方法相當於主線程執行。

class BThread implements Runnable {
    public void run() { System.out.println("Hello Word? No!IS Hello BThread!!!"); }
}
public class B {
    public static void main(String[] args) {
        Thread thread = new Thread(new BThread());
        thread.start();
    }
}

打印結果爲:

3.3、匿名內部類

匿名內部類相信有經驗的開發者應該知道,這個在一些項目模式中不會常用,依項目類型與需求而定。

//使用匿名內部類方式創建線程
Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("HI");
    }
});
thread.start();

當然也可以直接在創建後start,不建立Thread對象

3.4、匿名內部類(Lambda創建)

第四種其實只是基於第三種的優化,使用了Lambda而已,注意該種方式只存在於JDK1.8或以上:

//JDK1.8之後 Lambda創建
new Thread(() -> {
    System.out.println("A");
}).start();

四、啓動線程方式以及優先級

Start方法代表啓動一個線程,run方法相當於調用,而不是啓動線程。 main方法與線程方法同時運行,main會優先運行,因爲是主線程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章